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
)
答
上公认的答案扩展了一下,我需要一个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;
感谢萨·莫舍,谢谢你,不能做它没有你:)
@Kiquenet你是超过欢迎提供一个。 :) – Tomalak 2013-04-23 08:21:23