メール仕分け時に添付ファイルをストレージに保存する
環境
・Outlook 2022
実装内容
・メール仕分けルールで対象のメールを指定のフォルダに移動するとともに、
ファイルをローカルストレージに保存する
手順
- メール仕分けルールでスクリプトを実行できるようにする
- VBAプロジェクトにデジタル署名を行う(自己証明書でOK)
- マクロを作成する
- メール振り分けルールを作成する
1.メール仕分けルールでスクリプトを実行できるようにする
- Windows+R キーを押下して「ファイル名を指定して実行」を起動する
- 名前に「regedit」と入力してOKボタンをクリックし、レジストリエディタを表示する
- 「コンピューター\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Outlook\」
を右クリックしてコンテキストメニューを表示し、「新規>キー」をクリックする - 「キー」の名前を「Security」に変更する
※3,4は「Security」キーがあればスキップする - 3,4で作成した「Security」を右クリックし、「新規>DWORD(32bit値)」を選択する
- 以下の値を入力して「OK」ボタンをクリックする
値の名前:EnableUnsafeClientMailRules
値のデータ:1
表記:16進数 - 「OK」ボタンをクリックして設定を保存する
2.VBAプロジェクトにデジタル署名を行う(自己証明書でOK)
- 以下のURLを参考にVBAProjectにデジタル署名を行う
https://pgdays.com/index.php?option=com_content&view=article&id=62:vba-makuroni-zi-ji-shu-mingwotsukeru&catid=23&Itemid=119
3.マクロを作成する
サンプル
Option Explicit
' メール振り分けルールでスクリプトを実行するためのは、
' Public + Sub + 引数1個(item As Outlook.MailItem)にする必要がある
' ※メソッド名は任意
Public Sub SaveAttachmentFiles(item As Outlook.MailItem)
' 定数パラメータ
' 添付ファイル保存先
Const saveDir = "d:\test\"
' Outlookオブジェクト
Dim attachments As Outlook.attachments
Dim attachment As Outlook.attachment
Dim i As Integer
Dim fileName As String
' 添付ファイルを保存する
Set attachments = item.attachments
For i = 1 To attachments.Count
Set attachment = attachments.item(i)
attachment.SaveAsFile saveDir & attachment.DisplayName
Next
End Sub
4.メール仕分けルールを作成する
- メール振り分けルールを作成する(例)
この仕訳ルールは次のタイミングで適用されます: メッセージを受信したとき [差出人] example.google.com の場合 さらにこのコンピュータで送受信を行った場合のみ Test フォルダへ移動する さらに、Project.SaveAttachmentFilesを実行する さらに仕分けルールの処理を中止する
- 「OK」ボタンをクリックすると警告メッセージが表示されるが、
気にせず「OK」ボタンをクリックする
※スクリプトを振り分けルールに使用すると「クライアントルール」となるため、
警告が出る。
5.その他
・メール仕分けルールを使用せずにメール受信イベントを捕まえて添付ファイルの保存を
行うこともできるが、メール仕分けルールを使用した方が楽なので今回はメール仕分けルールを使用した。
・メール受信時に実装したい場合は以下のメソッドを実装すればよい
「Project>Microsoft Outlook Objects>ThisOutlookSession」を選択し、
左上のドロップダウンリストから「Application」を選択する。
その後、右上のドロップダウンリストから「NewMail」を選択して自動生成されたメソッドに実装を行う。
参考:https://docs.microsoft.com/ja-jp/office/vba/api/outlook.application.newmail
※マクロ内だけで処理が完結できるがコード量は増える