3

我有代码:

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

4

3 回答 3

2

我和你一样,只是包裹在一个班级里,它正在工作。

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

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;
于 2012-12-27T22:54:32.160 回答
0

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

还是非常感谢!!

于 2012-12-28T14:04:40.440 回答
0

如果电子邮件客户端尚未运行,则上述代码可以正常工作。

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

但是,如果从以管理员权限启动的应用程序调用(例如在调试器中运行的应用程序),则 MAPI 调用将失败并出现错误代码 2。如果调用者和电子邮件客户端都以管理员身份运行,那么一切正常(但谁够疯狂这些天来以管理员身份运行电子邮件客户端?)。

于 2014-11-26T18:21:47.330 回答