特定の受信者に送信する際に自動的に送信アカウントを変更するマクロ


コメントで以下のようなご要望をいただきました。


現在アカウントは2つあり、通常はデフォルトのアカウント(A)で送信するのはいいのですが
限定した人にメールを送る場合、アカウント(B)を使うように自動で切り替えるマクロは出来ないでしょうか?


Outlook 2007 であれば、SendUsingAccount プロパティにより送信に使用するアカウントを変更することができます。ただし、送信時に自動的に切り替えるためには ItemSend イベントの中で変更しなければならないのですが、ItemSend イベント内で変更した場合には実際に送信に使われるアカウントが変更前のものになってしまいます。そのため、マクロの実装としては自動的に切り替えていったん送信を中断するというものになります。

以下は、USE_SECOND_ADDRESS で指定したアドレスに送信する際に SECOND_ACCOUNT が使用されていなければ、アカウントを変更して送信を中断するマクロです。

' ここをトリプルクリックでマクロ全体を選択できます。
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
    Const SECOND_ACCOUNT = "sender@example.local" ' -- 既定ではないほうのアカウントを指定します。
    Const USE_SECOND_ADDRESS = "<user1@example.local><user2@example.local>" ' -- 上記のアカウントを使って送信するアドレスを <> で括って指定します。
    Dim objRecip As Recipient
    If Item.SendUsingAccount.DisplayName <> SECOND_ACCOUNT Then
        For Each objRecip In Item.Recipients
            If InStr(USE_SECOND_ADDRESS, "<" & objRecip.Address & ">") > 0 Then
                Dim objAccount As Account
                Set objAccount = Session.Accounts(SECOND_ACCOUNT)
                Set Item.SendUsingAccount = objAccount
                MsgBox "アカウントを変更しました。再度送信してください。"
                Cancel = True
                Exit For
            End If
        Next
    End If
End Sub

マクロの登録方法やメニューへの追加について

広告

特定の受信者に送信する際に自動的に送信アカウントを変更するマクロ」への7件のフィードバック

  1. とても有用なマクロ、興味深く拝見しました。
    このマクロを、
    ・特定のフォルダに分類されたメールに返信する際に、送信アカウントを変更(確認)する
    ように変更できませんでしょうか?
    よろしくお願いします。

    • このマクロは送信時に実行されるものですが、返信メッセージを送信するタイミングでは元のメッセージがどのフォルダに格納されていたかを判断することはできません。
      マクロを使って返信した場合に、元のメッセージのフォルダに従って送信アカウントを設定するというようなものなら可能です。

      • なるほど、ありがとうございます。
        その場合のサンプルマクロをいただければ大変助かります。
        お時間が許せば、是非お願いします。

  2. こちらの情報を参考に、SendUsingAccountプロパティを利用してみたのですが、以下のような手順で送信したところ、実行時エラー 91 が発生しました。
     ①新規作成したメールを、すぐに送信せず下書きに保存して閉じる。
     ②下書きから作成途中のメールを開いて送信する。
    どうやら、下書きフォルダに保管されているアイテムにはSendUsingAccountプロパティの情報が失われているようです。
    ただし、下書きフォルダに保管されたアイテムを開いた際、ウィンドウの「差出人」には作成時のアカウントが表示されているので、実際にはどこかに情報を保持しているように思うのですが、この情報が保持されているプロパティが見つかりません。
    一度下書きに保存したメールを送信する際にもアカウントの情報を利用する方法はありませんでしょうか。

    • 残念ながら、下書きフォルダーに保存したメールの SendUsingAccount を確認する方法はないようです。
      ただ、今回のマクロなら、SendUsingAccount が取れなかったという場合には送信アカウントを変更するというロジックでも大きな問題はないと思います。
      If 文の前に On Error Resume Next を挿入して試してみてください。

  3. ありがとうございます。
    やはり、下書きフォルダに保存したメールからはSendUsingAccountを確認することはできないのですね。
    残念です。

    ・・・では、下書きフォルダに保存したメールを開いた際に、差出人情報が表示されるカラクリはどういうことだろう?
    と思い、いろいろと試してみました。
    その結果、Aのアカウントで作ったメールをBの下書きに移動して開いたら、差出人はBとして表示され、
    単に「保存されている下書きフォルダのルートに当たるアカウント」が表示されることがわかりました。

    上記を踏まえ、SendUsingAccountが確認できない場合は、On Error 処理として
    Item.Parent.Parent.Nameからメールボックス名を取得して代用することで無事対応できました。
    ご教示ありがとうございました。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中