ゲスト 17人 と メンバー0人 がオンラインです

メール仕分け時に添付ファイルをストレージに保存する


環境

 ・Outlook 2022

実装内容

 ・メール仕分けルールで対象のメールを指定のフォルダに移動するとともに、
  ファイルをローカルストレージに保存する

手順

  1. メール仕分けルールでスクリプトを実行できるようにする
  2. VBAプロジェクトにデジタル署名を行う(自己証明書でOK)
  3. マクロを作成する
  4. メール振り分けルールを作成する

 

1.メール仕分けルールでスクリプトを実行できるようにする


  1. Windows+R キーを押下して「ファイル名を指定して実行」を起動する
  2. 名前に「regedit」と入力してOKボタンをクリックし、レジストリエディタを表示する
  3. 「コンピューター\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Outlook\」
    を右クリックしてコンテキストメニューを表示し、「新規>キー」をクリックする
  4. 「キー」の名前を「Security」に変更する
    ※3,4は「Security」キーがあればスキップする
  5. 3,4で作成した「Security」を右クリックし、「新規>DWORD(32bit値)」を選択する
  6. 以下の値を入力して「OK」ボタンをクリックする
    値の名前:EnableUnsafeClientMailRules
    値のデータ:1
    表記:16進数
  7. 「OK」ボタンをクリックして設定を保存する

 

2.VBAプロジェクトにデジタル署名を行う(自己証明書でOK)


  1. 以下の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.メール仕分けルールを作成する


  1. メール振り分けルールを作成する(例)
    この仕訳ルールは次のタイミングで適用されます: メッセージを受信したとき
    [差出人] example.google.com の場合
     さらにこのコンピュータで送受信を行った場合のみ
    Test フォルダへ移動する
     さらに、Project.SaveAttachmentFilesを実行する
     さらに仕分けルールの処理を中止する
  2. 「OK」ボタンをクリックすると警告メッセージが表示されるが、
    気にせず「OK」ボタンをクリックする
    ※スクリプトを振り分けルールに使用すると「クライアントルール」となるため、
     警告が出る。

 

5.その他

・メール仕分けルールを使用せずにメール受信イベントを捕まえて添付ファイルの保存を
 行うこともできるが、メール仕分けルールを使用した方が楽なので今回はメール仕分けルールを使用した。
・メール受信時に実装したい場合は以下のメソッドを実装すればよい
 「Project>Microsoft Outlook Objects>ThisOutlookSession」を選択し、
 左上のドロップダウンリストから「Application」を選択する。
 その後、右上のドロップダウンリストから「NewMail」を選択して自動生成されたメソッドに実装を行う。
 参考:https://docs.microsoft.com/ja-jp/office/vba/api/outlook.application.newmail
 ※マクロ内だけで処理が完結できるがコード量は増える