受信したメッセージを再送信するマクロ


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


outlook2010で受信したメッセージを自動的に再送信するVBAプログラムを作成したいと考えているのですが、初心者のため苦戦しています。
開いているメッセージを再送信するプログラムと受信時にアクションを起こすプログラムの例は見つかったのですが、これらをつなげて受信時に自動で再送信するプログラムにしたいと考えています。
条件としては再送信時にfromおよびToを自分自身にし、CC,BCCは削除する必要があります。


受信したメッセージを OFT として保存し、それを CreateItemFromTemplate で開いて送信すると、受信したメッセージを再送するような動作になります。
マクロは以下のとおりです。

' ここをトリプルクリックでマクロ全体を選択できます。
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
    Dim objItem
    Set objItem = Session.GetItemFromID(EntryIDCollection)
    If objItem.MessageClass = "IPM.Note" Then
        ForwardAsItIs objItem
    End If
End Sub
'
Private Sub ForwardAsItIs(ByVal objMail As MailItem)
    Const TO_ADDRESS = "user@example.com" ' 再送先アドレスを指定
    Dim strFileName As String
    Dim fwMail As MailItem
    Dim i As Integer
    ' 自分自身からのメールはループを防ぐため再送しない
    If objMail.SenderEmailAddress = Session.CurrentUser.Address Then
        Exit Sub
    End If
    ' 受信したメッセージを OFT として保存
    strFileName = Environ("TEMP") & "~forward.oft"
    objMail.SaveAs strFileName, olTemplate
    ' 保存した OFT からメッセージを作成
    Set fwMail = Application.CreateItemFromTemplate(strFileName)
    ' 宛先をすべて削除
    With fwMail.Recipients
        For i = .Count To 1 Step -1
            .Remove i
        Next
    End With
    ' 宛先を追加して送信
    fwMail.Recipients.Add TO_ADDRESS
    fwMail.Send
End Sub

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

広告

受信したメッセージを再送信するマクロ」への3件のフィードバック

  1. はじめまして.
     Outlookのマクロに関する資料を永年探していましたが,これといったものが見つからずあきらめていましたが,こんなサイトがあったのですね!
     有意義なサイトの公開に敬意を表しますとともに感謝申し上げます.

     いきなりの質問で不躾をご容赦ください.
     私は会社のメールサーバー(Exchange 2010)宛に送られたメールをOutlook2010の仕訳ルールでリダイレクトして,外出先でメールを受信しています.ところが,メールの発信者がCCを付けて送信した場合,リダイレクトされたメールを受信しても,オリジナルのメールに付いていたCCは削除されてしまいます.
     ここまではメールの仕様でいたしかたないと思っています.

     そこで,Outlookの仕訳ルールでリダイレクトする際に,マクロでヘッダを読み込んで,CCがあったら,CC先のアドレスを本文先頭にペーストしてから,外出先のメールアドレスへリダイレクトすれば良いのではないかと考えています.

     おそらく貴サイトの「受信したメッセージを再送信するマクロ」を少し改造すればできそうな気がしています.Outlookマクロは初めてなので,なんとも手出しができないでいます.
     ご指南をいただけると幸いに存じます.

    以上,よろしくお願い申し上げます.

    • 本来、リダイレクトされたメールを受信しても、CC は削除されていないはずです。
      それなのに CC が削除されているとなると、受信側のサーバーに何か問題があるのかもしれません。

      なお、リダイレクトという処理は、実は Outlook ではできません。
      Exchange サーバーの機能になります。
      そのため、リダイレクトの処理を Outlook のマクロで実装したり、カスタマイズしたりすることはできません。

      • outlooklab様,こんにちわ.ご返信ありがとうございます.

        >本来、リダイレクトされたメールを受信しても、CC は削除されていないはずです。
         Exchange 2010の仕分けルールだと「転送」なら転送先のメールでもCCアドレスが表示されるのですが,「リダイレクト」だとCCアドレスが表示されなくなるのです.
         ならば「転送」を使えば良さそうなのですが,これだとメールの発信者がオリジナルメールの発信者ではなくて,転送元の自分自身になってしまい,メールを開かないとオリジナルの発信者がわかりませんので不便です.

        >それなのに CC が削除されているとなると、受信側のサーバーに何か問題があるのかもしれません。
         受信側は@niftyなのでニフティさんに尋ねてみますが,調べた範囲では,どうも上記はExchangeサーバーの仕様のような感じがしていてあきらめてました.

        >なお、リダイレクトという処理は、実は Outlook ではできません。
         リダイレクトはExchangeサーバーの機能だったのですね.理解できてなくてすみません.

         リダイレクトの代わりに,次のような仕分けルールとマクロで実現できないかと
        考えていました:
         仕分けルールでは「自分のメールアカウントにメールを受信したら,Outlookの指定マクロを起動する.」
         マクロでは「受信メールの宛先にCCアドレスが含まれていたら,それを本文の先頭にコピーして,指定したメールアドレスへ再送信する.」

         こんな動作です.マクロでの実現は難しいでしょうか.

         どうぞよろしくお願いいたします.

コメントを残す

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

WordPress.com ロゴ

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

Twitter 画像

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

Facebook の写真

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

Google+ フォト

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

%s と連携中