自動仕分けのルールで転送するマクロ


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


特定の人からメールを受信したら、そのメールを特定フォルダーに移し、カスタムアクションを使って別の人をTOに、もう一人の人をCCに入れ、本文内に"checked"と入力した上で転送する方法はどうやれば良いのでしょうか?


自動仕分けルールの [カスタム アクション] を実装するには C++ などで本格的なプログラミングを行う必要があり、ちょっと敷居が高いと言えます。また、もともとは Exchange クライアントのルールを拡張するためにある機能なので、いずれなくなるかもしれません。
[スクリプト] なら VBA マクロでの実装が可能ですので、マクロによりご要望の動作を実装してみましょう。

自動仕分けルールからスクリプトで呼び出せるようにするには、マクロで定義する Sub プロシージャの引数として MailItem または MeetingItem のいずれかの型の変数を一つだけ指定します。これ以外の型 (例えば Variant や Object) を指定した場合、そのプロシージャはスクリプトで指定することができません。

具体的なマクロのサンプルは後述しますが、その前にやらなければならないことがあります。それは最新の累積的な修正プログラムを適用するということです。Outlook 2007 には POP/IMAP のアカウントでルールにスクリプトを指定した場合にクラッシュするという不具合があり、その不具合は 2009 年 8 月 25 日リリースの Outlook 2007 の累積的な修正プログラムによって修正されています。したがって、POP/IMAP のアカウントでルールにスクリプトを指定する場合は必ずこの修正プログラムを適用してください。

マクロのサンプルは以下の通りです。このプロシージャを定義すると、仕分けルールのアクションで [スクリプト] を指定した場合、[スクリプトの選択] でこのプロシージャが選択できるようになります。

' ここをトリプルクリックでマクロ全体を選択できます。
Sub CustomForwardRule(objItem As MailItem)
    Const TO_ADDRESS = "forwardto@example.com" ' 転送するメッセージの To を指定します。
    Const CC_ADDRESS = "forwardcc@example.com" ' 転送するメッセージの Cc を指定します。
    Dim objFwdItem As MailItem
    Set objFwdItem = objItem.Forward
    objFwdItem.To = TO_ADDRESS
    objFwdItem.CC = CC_ADDRESS
    objFwdItem.Recipients.ResolveAll
    objFwdItem.Body = "checked" & vbCrLf & objFwdItem.Body
    ' 件名など他にも変更するプロパティがある場合は、ここで変更します。
    objFwdItem.Send
End Sub

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

– 参考リンク
KB306108 Outlook の自動仕訳ウィザードでスクリプトを作成する方法
KB973404 Outlook 2007 修正プログラム パッケージ (Outlook-x-none.msp): 2009 年 8 月 25 日

自動仕分けのルールで転送するマクロ」への13件のフィードバック

  1. 本件について、質問です。
    環境は、Windows Vista + Outlook2007です。

    当記事のマクロを利用させていただいていますが、なぜか何日か何十回か頻度はわからないですが、仕訳ルールのチェックが外れてエラーになり、転送されなくなってしまいます。
    (すぐに再現できないので、エラー名は今記入できません。)
    これについて、回避策はありますでしょうか?
    例えば、OUTLOOK起動時に、毎回、該当仕訳ルールをONにするマクロを記述する等。
    よろしくお願いします。

    • おそらくはマクロでの転送の際に何らかのエラーが発生しているのではないかと思います。
      Sub CustomForwardRule(objItem As MailItem) の下に以下の 1 行を追加してみてください。

      On Error Resume Next

      • outlooklab様
        返信ありがとうございます。
        On Error Resume Nextは、既に記述されております。
        なお、最後に Goto 0 で終了後元に戻しております。

        Sub CustomForwardRule_sppForward(objItem As MailItem)
        Dim myForward As MailItem
        Dim forwardMsg As String

        forwardMsg = “メールの転送”
        On Error Resume Next

        If TypeName(objItem) = “MailItem” Then
        ‘ Forward the item just received
        Set myForward = objItem.Forward

        ‘ Address the message
        With myForward
        .Recipients.Add “****@*******.jp”
        .ReadReceiptRequested = False
        .Body = forwardMsg & vbLf & myForward.Body
        ‘転送実行
        .Send
        End With
        End If

        On Error GoTo 0
        End Sub

      • On Error Resume Next でハンドルできないエラーが発生してしまっているのでしょう。
        解決方法があるかちょっと検討してみます。

  2. エラーが再現しました。
    「エラーを起こしたルール」という標題のダイアログが出て、その中にルール名と、エラーとして、「操作は失敗しました。」という、表示がされます。ダイアログのボタンは、「閉じる」のみ表示されています。

    • 残念ながら「操作は失敗しました。」というエラーでは具体的にどのような現象が発生したのがかわかりません。
      お手数ですが、このようなエラーが発生したら手動でルールをオンにするという方法で対処いただけないでしょうか?

      • 返信ありがとうございます。
        >このようなエラーが発生したら手動でルールをオンにするという方法で対処いただけないでしょうか?
        はい、このエラーで出るたびに手動でオンにして再設定し、再びマクロにより自動転送ができるように
        なるのですが、数日に一度は上記のエラーが再現し、同じことの繰り返しになってしまいます。
        原因がわからないので、最悪、この手動でルールをオンにする操作をマクロで実現できれば、OUTLOOK
        起動時か、マクロ起動時にこれを仕込んで、On Error Resume Next … の中で実行すればと考えた
        のですが....
        マクロでルールをonにする記述はやはり存在しないのしょうか?
        (いろいろググりましたが、わかりませんでした。)

      • Outlook 2007 以降であればマクロでルールを有効化することも可能です。
        サンプルコードを作りますので少々お待ちください。

  3. レポートを受信した際にエラーになるようですが、どのようにしたらよいのでしょうか?

  4. […] ルールによる転送、返信では BCC を指定することができませんが、ルールのアクションとしてスクリプトを選択し、以下のようなマクロを実行するスクリプトとして選択することで実現できます。 FORWARD_TO、FORWARD_BCC や REPLY_BCC に転送先や BCC したいアドレスなどを設定し、マクロのスクリプトとして転送する際には ForwardWithBCC を、返信する際には ReplyWithBCC を指定します。 ルールで指定できるマクロを作るための詳細については自動仕分けのルールで転送するマクロを参照してください。 […]

  5. […] 以前公開した、自動仕分けで転送するマクロに手を加えることで実現は可能です。 以下のようなマクロになります。 自動転送する条件 (あるアドレスから来たメール) を指定した仕分けルールのアクションで [スクリプト] を指定し、[スクリプトの選択] で以下のマクロを選択してください。 […]

  6. 記事のアップからだいぶ時間がたっておりますがご回答いただけると幸いです。
    本記事のマクロを使用させていただいています。
    一般メールの転送は問題なくできました。
    会議開催の通知や更新・キャンセル通知を
    スクリプトの仕分けルールを利用して転送したいと考えています。
    会議開催や更新・キャンセルの転送は
    Sub CustomForwardRule(objItem As MailItem)

    Sub CustomForwardRule(objItem As MeetingItem)
    に変更すればいいということでしょうか?
    念のため環境を記載します。
    windows10 64bit
    Outlook 2010

    宜しくお願いいたします。

コメントを残す