適材適所

パソコン作業の自動化・効率化のための情報を発信するブログ(VBA,PowerShellなど)

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

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

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

以前、Notesメールの一覧を取得する記事を書きましたが、その続編です。

www.tekizai.net

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

あまり需要がないのか、ネットで調べてもVBAで添付ファイルを保存するコードが出てこなかったので調べてみました。

コード

ここで紹介するのは、受信メールの全ての添付ファイルを変数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:\sample\"(環境に合わせて設定)
    'セッションを確立
    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

ローカルへの保存手順

添付ファイルをローカルに保存する際は、NotesEmbeddedObject#ExtractFileメソッドを使います。

NotesEmbeddedObjectは埋め込みオブジェクト、オブジェクトリンク、添付ファイルのどれかを表します。

そもそもNotesEmbeddedObjectオブジェクトはどうやって取得できるのかというと、NotesRichTextItemオブジェクトにあります。

NotesRichTextItemオブジェクトは、NotesDocument#GetFirstItem("Body")で取得する、Bodyアイテムです。

おわりに

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

NotesはIBMから売却され、どんどん日本でも下火になっているようですが、まだまだ、ひっそりと使われていくのでしょう・・・。

そして自動化したいというニッチなニーズがあると信じて、これからも記事を書いていきたいと思います。

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

参考サイト様

IBM Knowledge Center