Outlookを自動化しており、電子メールの送信者を制御する必要があります。ユーザーはOutlookで2つ以上のアカウントを設定することになり、メールの送信元のアカウントを選択できるようにする必要があります。何か案は?
Outlook2003以降でサポートされている必要があります。私はこれをコーディングするためにDelphi2006を使用していますが、それは実際には問題ではありません。
Outlookを自動化しており、電子メールの送信者を制御する必要があります。ユーザーはOutlookで2つ以上のアカウントを設定することになり、メールの送信元のアカウントを選択できるようにする必要があります。何か案は?
Outlook2003以降でサポートされている必要があります。私はこれをコーディングするためにDelphi2006を使用していますが、それは実際には問題ではありません。
Sue Mosher という名前の人が、この問題についてmicrosoft.public.office.developer.outlook.vbaにかなりの要約を書きました。
要するに、次のいずれかに要約されます。
MailItem.SentOnBehalfOfName
、Exchange環境でのみ機能します(あなたの場合だと思います)-ユーザーが他のExchangeメールボックスの「送信者」権限を持っている場合、これはアカウントの切り替えとほとんど同じです。CommandBars
MailItem.SendUsingAccount
)受け入れられた回答を少し拡張すると、Sue の set_account 関数の Delphi 実装が必要になりました。これに関するインターネット上のどこにも何も見つからなかったので、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 のおかげです。ありがとうございます。あなたなしではできなかったでしょう :)