質問
Outlookを自動化しているため、メールの送信者を制御する必要があります。ユーザーはOutlookで2つ以上のアカウントを設定し、メールを送信するアカウントを選択できるようにする必要があります。アイデアはありますか?
Outlook 2003以降でサポートされる必要があります。これをコーディングするためにDelphi 2006を使用していますが、それは実際には重要ではありません。
解決
Sue Mosherという名前の人が、この問題に関するかなりの要約を microsoft.public.office.developer.outlook.vba 。
要するに、次のいずれかに要約されます。
-
MailItem.SentOnBehalfOfName
を使用します。これは、Exchange環境でのみ機能します(これはあなたに当てはまると思います)-ユーザーが「Send As」を持っている場合他のExchangeメールボックスのアクセス許可、これはアカウントの切り替えとほとんど同じです。 -
CommandBars
をいじる必要がある小さなハックを使用する
- Outlookリデンプションを使用
- (OL2007では、
MailItem.SendUsingAccount
)
他のヒント
受け入れられた答えを少し広げて、Sueのset_account関数のDelphi実装が必要でした。これについてはインターネット上で何も見つからなかったので、ここにスーのコードの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;
スー・モッシャーへのクレジット、ありがとう、あなたなしではできなかったでしょう:)
所属していません StackOverflow