Delphi MapiSendMail返回MAPI_E_USER_ABORT

tyu7yeag  于 2023-08-04  发布在  其他
关注(0)|答案(1)|浏览(92)

我会这样调用MapiSendMail

lErrorCode := MapiSendMail(0, GetModuleHandle(nil), lMessage, MAPI_DIALOG or MAPI_LOGON_UI or MAPI_NEW_SESSION, 0);

字符串
在我的开发服务器(Win 2016)上,这将返回0并在outlook(标准mapi客户端)中打开一条新消息。
然而,在多个客户端(Win 10 Pro,Win 11 Pro)上,lErrorCode的值为1。根据文档,这意味着MAPI_E_USER_ABORT
用户取消了其中一个对话框。未发送任何消息。
返回后直接调用SysErrorMessage(GetLastError))
普罗泽杜尔的天使并不值得。
译文:
找不到指定的过程。
我的猜测是mapi32.dll没有正确注册或者有错误的版本。我该如何测试这个问题或找到另一种方法来解决这个问题?

aurhwmvo

aurhwmvo1#

感谢@RemyLebeau的评论,我在查找MapiLogon()时在this stackoverflow post中找到了解决方案:
我将以下注册表项设置为字符串:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Messaging Subsystem\MAPI="1"
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows Messaging Subsystem\MAPI="1"

字符串
现在,MapiSendMail()在outlook中正确打开新邮件。

相关问题