【Outlook/VBA】メール受信時に相手の宛先別で処理を行う

Excel/VBA

一つのアドレスが複数のメーリングリストに属してて、受信時の挙動をそれぞれのアドレス毎に分けたい。そんな時の処理。

スポンサーリンク

やりたい事

 

自分のアドレスはhoge@hoge.comとして、XXX@xxx.comとYYY@yyy.comとZZZ@zzz.comと複数メーリングリストに属している状態。
A社はXXX@xxx.comのメーリングリストに送って来て、B社はYYY@yyy.comに送ってくるので、
相手の宛先別で、共有フォルダにフォルダを分けて添付ファイルの保存を行いたいってのが今回やりたい。

以下コピッペで利用可能

 

Option Explicit
 
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)

    Const PR_SMTP_ADDRESS As String = "http://schemas.microsoft.com/mapi/proptag/0x39FE001E"
    Dim recip As Outlook.Recipient

    For Each recip In GetNamespace("MAPI").GetItemFromID(EntryIDCollection).Recipients
       ' 相手の宛先別
       Select Case recip.PropertyAccessor.GetProperty(PR_SMTP_ADDRESS)
       
          Case "XXX@xxx.com"
                  FileUplode ("\\192.168.100.100\共有フォルダ\XXX\")
          Case "YYY@yyy.com"
                  FileUplode ("\\192.168.100.100\共有フォルダ\YYY\")
          Case "ZZZ@zzz.com"
                  FileUplode ("\\192.168.100.100\共有フォルダ\ZZZ\")
          Case Else

       End Select

    Next

End Sub


Private Function FileUplode(strAddress As String)

    Dim nCnt As Long
    Dim objId As Object
    
    ' 受信トレイ指定 サブフォルダ指定の場合は.Foldersで指定
    For Each objId In GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Items
       ' 未読の場合
       If objId.UnRead = True Then
          For nCnt = 1 To objId.Attachments.Count
             ' PDFが添付されている場合
             If InStr(objId.Attachments.Item(nCnt), ".pdf") Then
                ' 引数のアドレスへ添付を保存
                objId.Attachments.Item(nCnt).SaveAsFile strAddress & objId.Attachments.Item(nCnt)
                ' 既読にする
                objId.UnRead = False
             End If
          Next
       End If
    Next
    
End Function

 

まとめ


実際に保存を行う処理はFileUplodeとして関数化し、保存先アドレスを引数で渡す形にしてみた。
今回pdf以外は弾きたかったので拡張子で識別してるけども不要なら勿論無くてOK。

ただし、メール受信でキックされるので、当然だけれどもOutlookは起動しっぱなしじゃないとダメ。
なのでOutLook系は仮想環境とかでの運用が適してるかも。普段はサンダーバード派なので。。。(ᵔᴥᵔ)

コメント