Delphi MapiSendMail возвращает MAPI_E_USER_ABORT
Я звоню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
зарегистрирован неправильно или имеет неправильную версию. Как мне проверить это или найти другой способ решить эту проблему?
1 ответ
Благодаря комментарию @RemyLebeau я нашел решение в этом сообщении stackoverflow при поискеMapiLogon()
:
Я установил следующие ключи реестра как строку:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Messaging Subsystem\MAPI="1"
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows Messaging Subsystem\MAPI="1"
СейчасMapiSendMail()
правильно открывает новое сообщение в Outlook.