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

问题描述:

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

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

一个叫Sue Mosher的人在microsoft.public.office.developer.outlook.vba上写了一篇关于这个问题的漂亮总结。

总之,归结为任一本:

  • 使用MailItem.SentOnBehalfOfName,其中仅在Exchange enviromnents工作(我想这是你的情况下) - 当用户拥有“发送为”权限对于其他Exchange邮箱,这与交换帐户几乎相同。
  • 用一个小黑客工具,包括与CommandBars
  • 使用的Outlook赎回摆弄
  • (在OL2007,你会MailItem.SendUsingAccount
+0

@Kiquenet你是超过欢迎提供一个。 :) – Tomalak 2013-04-23 08:21:23

上公认的答案扩展了一下,我需要一个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; 

感谢萨·莫舍,谢谢你,不能做它没有你:)