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.

Другие вопросы по тегам