VBAでNotesメールの添付ファイルを保存する
VBAを使ってNotesメールを操作するシリーズです。
以前、Notesメールの一覧を取得する記事を書きましたが、その続編です。
VBAでNotesメールの添付ファイルをローカルに保存する方法を紹介します。
コード
ここで紹介するのは、受信メールの全ての添付ファイルを変数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から売却され、日本でも下火になっているようですね・・・。
それでも、まだまだ、ひっそりと使われていくのでしょう・・・。
そして自動化したいというニッチなニーズがあると信じて、これからも記事を書いていきたいと思います。
ここまでお読みいただき、ありがとうございました。