Automazione di Outlook - Cambia account mittente
-
03-07-2019 - |
Domanda
Sto automatizzando Outlook e devo controllare da chi appare l'e-mail. Gli utenti avranno due o più account configurati in Outlook e devo essere in grado di selezionare da quale account inviare l'e-mail. Qualche idea?
Deve essere supportato su Outlook 2003 e versioni successive. Sto usando Delphi 2006 per codificare questo, ma non importa.
Soluzione
Una persona di nome Sue Mosher ha scritto un bel sommario su questo problema in microsoft.public.office.developer.outlook.vba .
In breve, si riduce a uno di questi:
- usa
MailItem.SentOnBehalfOfName
, che funziona solo negli ambienti Exchange (suppongo che sia il caso per te) - quando l'utente ha " Invia come " autorizzazioni per l'altra cassetta postale di Exchange, è praticamente la stessa cosa del cambio di account. - usa un piccolo hack che coinvolge armeggiare con
CommandBars
- utilizza Outlook Redemption
- (in OL2007, avresti
MailItem.SendUsingAccount
)
Altri suggerimenti
Espandendo un po 'la risposta accettata, avevo bisogno di un'implementazione Delphi della funzione set_account di Sue. Non ho trovato nulla su Internet da nessuna parte per questo, quindi ecco un'interpretazione di Delphi del codice di 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;
Ringraziamo Sue Mosher, grazie, non avresti potuto farlo senza di te :)