首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JclMapi mapi常规故障

JclMapi mapi常规故障
EN

Stack Overflow用户
提问于 2012-12-28 05:17:56
回答 3查看 978关注 0票数 3

我有代码:

代码语言:javascript
复制
procedure TfrmMain.btnSendClick(Sender: TObject);
var
  aMail: TJclEMail;
begin
  aMail := TJclEMail.Create;
  Screen.Cursor := crHourGlass;
  try
    aMail.Recipients.Add('service@blabla.com');
    aMail.Subject := '[IMPORTANT] blablba';

    aMail.Body := 'text text text text';
    aMail.Send(True);
  finally
    Screen.Cursor := crDefault;
    aMail.Free;
  end;
end;

这抛出: MAPI错误:(2)“一般MAPI失败”有什么想法吗?

ps:操作系统Windows 7 Outlook 2010 Delphi 2007

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-28 22:04:40

我的问题是我的绝地图书馆不是最新的。我在绝地资源库中搜索,发现JclMapi在12月27日星期二发生了变化(Mantis5748: JclMapi与64位不兼容)。下载此更改,重新编译pkg,现在可以完美地工作了!

无论如何,谢谢你!

票数 0
EN

Stack Overflow用户

发布于 2012-12-28 06:54:32

我有和你一样的东西,只是包装在一个类中,它正在工作。

我用来在第一次执行Send()时检查MAPI是否正常:

代码语言:javascript
复制
function TMAPIPrerequisites.IsClientAvailable: Boolean;
var
  SimpleMAPI: TJclSimpleMapi;
begin
  SimpleMAPI := TJclSimpleMapi.Create;
  try
    Result := SimpleMAPI.AnyClientInstalled;
  finally
    SimpleMAPI.Free;
  end;
end;

function TMAPIPrerequisites.IsMapiAvailable: Boolean;
var
  SimpleMAPI: TJclSimpleMapi;
begin
  SimpleMAPI := TJclSimpleMapi.Create;
  try
    Result := SimpleMAPI.SimpleMapiInstalled;
  finally
    SimpleMAPI.Free;
  end;
end;
票数 2
EN

Stack Overflow用户

发布于 2014-11-27 02:21:47

如果电子邮件客户端尚未运行,则上面的代码运行良好。

在解决了同样的问题之后,我发现MAPI客户端必须在与MAPI服务器相同的用户上下文中运行(在我的例子中是电子邮件客户端- Thunderbird )。

但是,如果从具有管理员权限的应用程序开始调用(例如,在调试器中运行的应用程序),则MAPI调用将失败,并返回错误代码2。如果调用者和电子邮件客户端都以管理员身份运行,则一切正常(但现在谁会疯狂到以管理员身份运行电子邮件客户端?)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14061425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档