Автоматизация Outlook — изменение учетной записи отправителя
-
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;
Спасибо Сью Мошер, спасибо, без вас бы ничего не получилось :)