Automatisation Outlook - Modifier le compte expéditeur

J'automatise Outlook et j'ai besoin de contrôler de qui l'email semble provenir. Les utilisateurs auront deux comptes ou plus mis en place dans Outlook et je dois être en mesure de sélectionner le compte à partir duquel envoyer l'email. Des idées?

Doit être pris en charge sur Outlook 2003 et versions ultérieures. J'utilise Delphi 2006 pour coder ceci, mais cela n'a pas vraiment d'importance.

3

2 Réponses

Une personne nommée Sue Mosher a écrit un joli résumé sur ce problème dans microsoft.public.office.developer.outlook.vba .

En bref, il se résume à l'un ou l'autre de ceci:

  • use MailItem.SentOnBehalfOfName, which only works in Exchange enviromnents (I suppose that is the case for you) - when the user has "Send As" permissions for the other Exchange mailbox, this is pretty much the same thing as switching accounts.
  • use a small hack that involves fiddling with the CommandBars
  • use Outlook Redemption
  • (in OL2007, you would have MailItem.SendUsingAccount)
2
ajouté
ajouté l'auteur Kiquenet, source
@Kiquenet Vous êtes le bienvenu pour en fournir un. :)
ajouté l'auteur Tomalak, source

En développant un peu la réponse acceptée, j'avais besoin d'une implémentation Delphi de la fonction set_account de Sue. Impossible de trouver quelque chose sur internet où que ce soit, alors 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;

Merci à Sue Mosher, merci, n'aurait pas pu le faire sans vous :)

2
ajouté