Автоматизация Outlook — изменение учетной записи отправителя

StackOverflow https://stackoverflow.com/questions/201848

  •  03-07-2019
  •  | 
  •  

Вопрос

Я автоматизирую Outlook, и мне нужно контролировать, от кого приходит электронное письмо.У пользователей будет две или более учетных записи, настроенных в Outlook, и мне нужно иметь возможность выбрать, с какой учетной записи отправлять электронное письмо.Есть идеи?

Требуется поддержка в Outlook 2003 и более поздних версиях.Для написания кода я использую Delphi 2006, но это не имеет особого значения.

Это было полезно?

Решение

Человек по имени Сью Мошер написала симпатичное резюме по этому вопросу в microsoft.public.office.developer.outlook.vba.

Короче говоря, это сводится к одному из следующих вариантов:

  • использовать MailItem.SentOnBehalfOfName, который работает только в среде Exchange (я полагаю, это относится и к вам) - когда у пользователя есть разрешения «Отправить как» для другого почтового ящика Exchange, это почти то же самое, что переключение учетных записей.
  • используйте небольшой хак, который включает в себя возню с CommandBars
  • использовать погашение Outlook
  • (в OL2007 у вас будет MailItem.SendUsingAccount)

Другие советы

Немного расширив принятый ответ: мне нужна была реализация в Delphi функции set_account Сью.Нигде в Интернете не удалось найти ничего по этому поводу, поэтому вот интерпретация кода Сью в Delphi.

Function SetAccount(TargetAccount:string; var MailItem:OLEVariant):boolean;
var OLI,CBs,CBP,MC:olevariant;
    strAccountBtnName:String;
    i,t:Integer;
    FoundAccount:Boolean;
Const ID_ACCOUNTS = 31224;
begin
    FoundAccount:=false;
    OLI:=MailItem.GetInspector;
    CBs:=OLI.CommandBars;
    CBP:=CBs.FindControl(, ID_ACCOUNTS);
    t:=1;
    while (not FoundAccount) and (t<=CBP.Controls.Count) do begin
       MC:=CBP.Controls[t];
       i:=Pos(' ',MC.Caption);
       if i > 0 Then strAccountBtnName:=Copy(MC.Caption,i+1,Length(MC.Caption)-i)
       else strAccountBtnName:=MC.Caption;
       if strAccountBtnName = TargetAccount then begin
           MC.Execute;
           FoundAccount:=true;
       end;
       inc(t);
    end;
    Result:=FoundAccount;
end;

Спасибо Сью Мошер, спасибо, без вас бы ничего не получилось :)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top