При работе с Outlook в контексте автоматизации задач пользователи часто сталкиваются с проблемой выбора аккаунта для отправки электронных писем. В случае, если у пользователя имеется несколько аккаунтов в приложении Outlook, важно уметь корректно настроить процесс отправки, чтобы письмо уходило именно с нужного аккаунта.
Проблема
Разработчики, использующие возможности OLE для взаимодействия с Outlook, сталкиваются с проблемой, когда при попытке указать конкретный аккаунт для отправки сообщения через свойство SendUsingAccount объекта MailItem, в поле "От" письма отображается аккаунт текущего пользователя, а не тот, который был установлен.
Пример кода
procedure TOutlookOLE.AssignSenderFromAccounts(const _MailFromEmail: string);
var
i: integer;
NewSender: OleVariant;
sendermail: string;
begin
// Цикл по всем аккаунтам для определения нужного
for I := 1 to OutlookAppObject.Session.Accounts.Count do
begin
NewSender := OutlookAppObject.Session.Accounts.Item(i);
sendermail := VarToStr(NewSender.SmtpAddress);
if NOT VarIsNull(NewSender) AND SameText(sendermail, _MailFromEmail) then
begin
// Установка аккаунта для отправки
if MailCreated then
OutlookMailItem.SendUsingAccount := NewSender
else
raise Exception.Create('Outlook OLE Exception: Mail object not created.');
break;
end;
end;
end;
Решение проблемы
После получения ответа от пользователя с никнеймом Dmitri, был предложен обновленный метод, который включает в себя установку MAPI свойства PR_SENT_REPRESENTING_EMAIL_ADDRESS. Это свойство позволяет корректно указать адрес электронной почты для отправки сообщения, даже если используется свойство SendUsingAccount.
const PR_SENT_REPRESENTING_EMAIL_ADDRESS = 'http://schemas.microsoft.com/mapi/proptag/0x0065001F';
...
if MailCreated then
begin
OutlookMailItem.SendUsingAccount := NewSender;
OutlookMailItem.PropertyAccessor.SetProperty(
PR_SENT_REPRESENTING_EMAIL_ADDRESS,
WideString(_MailFromEmail));
end;
Подтвержденный ответ
Известная проблема Outlook заключается в том, что для корректной работы с аккаунтами необходимо также обновить MAPI свойство PR_SENT_REPRESENTING_EMAIL_ADDRESS. Это действие позволяет указать, что письмо должно быть отправлено с использованием конкретного электронного адреса, даже если в настройках Outlook указан другой аккаунт по умолчанию.
Заключение
Используя предложенные методы, разработчики могут настраивать Outlook для отправки электронных писем с конкретного аккаунта, что особенно важно в ситуациях, когда пользователь имеет несколько аккаунтов и хочет автоматизировать процесс отправки с использованием определенного аккаунта. Приведенный пример кода на Object Pascal (Delphi) демонстрирует, как это можно сделать на практике.
Настройка Microsoft Outlook для выбора конкретного аккаунта при отправке электронных писем, особенно важно при использовании нескольких аккаунтов в приложении.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS