3

Outlookを自動化しており、電子メールの送信者を制御する必要があります。ユーザーはOutlookで2つ以上のアカウントを設定することになり、メールの送信元のアカウントを選択できるようにする必要があります。何か案は?

Outlook2003以降でサポートされている必要があります。私はこれをコーディングするためにDelphi2006を使用していますが、それは実際には問題ではありません。

4

2 に答える 2

2

Sue Mosher という名前の人が、この問題についてmicrosoft.public.office.developer.outlook.vbaにかなりの要約を書きました。

要するに、次のいずれかに要約されます。

  • use MailItem.SentOnBehalfOfName、Exchange環境でのみ機能します(あなたの場合だと思います)-ユーザーが他のExchangeメールボックスの「送信者」権限を持っている場合、これはアカウントの切り替えとほとんど同じです。
  • をいじる小さなハックを使用するCommandBars
  • Outlook Redemption を使用する
  • (OL2007 の場合はMailItem.SendUsingAccount)
于 2008-10-14T16:46:03.163 に答える
2

受け入れられた回答を少し拡張すると、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 のおかげです。ありがとうございます。あなたなしではできなかったでしょう :)

于 2011-09-10T14:04:48.670 に答える