Automatisation Outlook - Changer le compte de l'expéditeur
-
03-07-2019 - |
Question
J'automatise Outlook et je dois contrôler l'origine de l'email. Les utilisateurs auront deux comptes ou plus configurés dans Outlook et je dois pouvoir sélectionner le compte à partir duquel envoyer le courrier électronique. Des idées?
Doit être pris en charge sur Outlook 2003 et les versions ultérieures. J'utilise Delphi 2006 pour coder cela, mais cela n'a pas vraiment d'importance.
La solution
Une personne nommée Sue Mosher a rédigé un joli résumé de cette question dans microsoft.public.office.developer.outlook.vba .
En bref, cela se résume à l'une de ces choses:
- utilisez
MailItem.SentOnBehalfOfName
, qui ne fonctionne que dans les environnements Exchange (je suppose que c'est le cas pour vous), lorsque l'utilisateur a " Envoyer en tant que " autorisations pour l’autre boîte aux lettres Exchange, c’est à peu près la même chose que changer de compte. - utilisez un petit hack qui consiste à jouer avec les
CommandBars
- utiliser Outlook Redemption
- (dans OL2007, vous auriez
MailItem.SendUsingAccount
)
Autres conseils
Pour approfondir un peu la réponse acceptée, il me fallait une implémentation Delphi de la fonction set_account de Sue. N'ayant rien trouvé sur Internet pour cela, voici une interprétation Delphi du code de Sue.
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;
Remerciements à Sue Mosher, merci, je n’aurais pas pu le faire sans vous :)