Outlook自动化 - 更改发件人帐户

时间:2008-10-14 16:17:34

标签: outlook automation

我正在自动化Outlook,我需要控制电子邮件的来源。用户将在Outlook中设置两个或多个帐户,我需要能够选择从哪个帐户发送电子邮件。有什么想法吗?

需要在Outlook 2003及更高版本上受支持。我正在使用Delphi 2006来编写代码,但这并不重要。

2 个答案:

答案 0 :(得分:2)

一位名叫Sue Mosher的人在microsoft.public.office.developer.outlook.vba中就此问题撰写了一篇非常精彩的摘要。

简而言之,它归结为以下任何一种:

  • 使用MailItem.SentOnBehalfOfName,它只适用于Exchange环境(我想你就是这种情况) - 当用户对其他Exchange邮箱具有“代理发送”权限时,这几乎与转换帐户。
  • 使用涉及摆弄CommandBars
  • 的小黑客
  • 使用Outlook Redemption
  • (在OL2007中,您将拥有MailItem.SendUsingAccount

答案 1 :(得分:2)

对接受的答案进行了扩展,我需要一个Delphi实现的Sue的set_account函数。无论如何都无法在互联网上找到任何东西,所以这里是对Sue代码的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;

归功于Sue Mosher,谢谢你,没有你就不可能做到:)