適材適所

PowerShellを中心にプログラミングやシステム管理の備忘録的なブログ

VBAでNoteメールの添付ファイルを保存する

VBAでNotesメールの添付ファイルを保存する

VBAを使ってNotesメールを操作するシリーズです。

VBAでNotesメールの添付ファイルをローカルに保存する方法を紹介します。

VBAでNoteメールの添付ファイルを保存する

ここで紹介するのは、受信メールの全ての添付ファイルを変数SAVE_DIRで指定したフォルダに保存するコードです。

受信フォルダにメールが沢山ある場合は、大量のファイルがローカルに保存される可能性がありますのでご注意ください。

実行するには、参照設定で「Lotus Domino Object」にチェックを付けておく必要があります。

 
Sub GetAttachedObjectFromMail()
    Const PASSWORD As String = (環境に合わせて設定)
    Const SERVER As String =(環境に合わせて設定)
    Const NOTES_FILE As String =(環境に合わせて設定)
    Const SAVE_DIR As String = "C:\(環境に合わせて設定)"
    Const EMBED_ATTACHMENT as Long = 1454 
    'セッションを確立
    Dim notesSession As notesSession: Set notesSession = New notesSession
    notesSession.Initialize PASSWORD
    'Notesのデータベースを取得
    Dim notesDB As NotesDatabase: Set notesDB = notesSession.GetDatabase(SERVER, NOTES_FILE)
    'Notesデータベースから全ての文書を取得する
    Dim notesDocs As NotesDocumentCollection: Set notesDocs = notesDB.AllDocuments
    '最初の文書を取得
    Dim notesDoc As NotesDocument: Set notesDoc = notesDocs.GetFirstDocument
    '全ての文書にアクセスする
    On Error Resume Next
    Do Until (notesDoc Is Nothing)
       '添付ファイルがあるか
        If notesDoc.HasEmbedded Then
            Dim emObj As NotesEmbeddedObject
            Dim richTxt As NotesRichTextItem:Set richTxt = notesDoc.GetFirstItem("Body")
            Dim i As Long
            For i = 0 To UBound(richTxt.EmbeddedObjects)
                Set emObj = richTxt.EmbeddedObjects(i)
                 ’属性が添付ファイルかどうか
                 If emObj.Type = EMBED_ATTACHMENT Then
                    emObj.ExtractFile SAVE_DIR & emObj.Name
                 End If
            Next i
        End If
        '次の文書を取得する
        Set notesDoc = notesDocs.GetNextDocument(notesDoc)
    Loop
    On Error GoTo 0
End Sub

ローカルへのファイルの保存について

コードのおおまかな流れは、こちらの記事(VBAでNotesメールを取得する簡単なサンプル - 適材適所)をご参照頂けますと幸いです。

NotesRichTextItemオブジェクトは、NotesDocument#GetFirstItem("Body")で取得する、Bodyアイテム、つまりメールの本文の全体を表すもののイメージです。

添付ファイル等があるときは、その中にNotesEmbeddedObjectオブジェクトというオブジェクトが存在しています。これはメールの中のリンクや添付ファイルといったオブジェクトを表しています。

NotesEmbeddedObjectオブジェクトは埋め込みオブジェクト、オブジェクトリンク、添付ファイルのどれかを表すので、添付ファイルかどうか判別するためにEMBED_ATTACHMENT定数として定義している1454と比較しています。

添付ファイルをローカルに保存する際は、NotesEmbeddedObjectが持っているExtractFileメソッドを使うことで実現することができます。

終わりに

VBAでNotesの添付ファイルをローカルフォルダに保存するコードを紹介しました。

添付ファイルを表すオブジェクトの取り扱いさえわかってしまえば、簡単にローカルに保存することができます。

ただし、上記コードを実行するときは、大量のデータが保存される可能性があるのでご注意ください。

ここまでお読みいただき、ありがとうございました。