JclMapi mapi一般失败

时间:2012-12-27 21:17:56

标签: delphi delphi-7 delphi-2010

我有代码:

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 德尔福2007

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

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

无论如何,谢谢!!

答案 2 :(得分:0)

上面的代码工作正常,如果电子邮件客户端尚未运行。

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

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