1

我有一个问题,只有在使用 JCL(我确保使用最新的)MAPI 代码时才会在 Delphi unicode 上发生。

我得到一般 MAPI 失败

  TmpEmail := TjclEmail.Create;

  TmpResolve := False;
  try
    TmpResolve := TmpEmail.ResolveName(TmpStr_Name, TmpStr_Email, True);
  except
    // new code for Delphi unicode... Also gives mapi failure
  end;
  if TmpResolve then
    TmpEmail.Recipients.Add(TmpStr_Email)
  else
    TmpEmail.Recipients.Add('smtp:' + TmpStr_Email)
  ;
  TmpEmail.Recipients[0].Name := TmpEmail.Recipients[0].Address;

  TmpEmail.Subject := 'bla bla';
  TmpEmail.Send(True);

此代码适用于 Delphi 2007、相同的 JCL、Thunderbird,但在使用例如 Delphi 2010 时不适用。我已经尝试过应用一般 JCL/MAPI 解决方法。有任何想法吗?:)

4

1 回答 1

3

我有同样的问题。在我的情况下,应用程序以管理员权限运行,而邮件客户端在默认的 Windows 用户上下文下运行。

也许这篇文章可以提供帮助: JclMapi mapi general failure

见最后一个答案。引用:

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

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

于 2015-02-04T11:18:14.283 回答