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の添付ファイルをローカルフォルダに保存するコードを紹介しました。
添付ファイルを表すオブジェクトの取り扱いさえわかってしまえば、簡単にローカルに保存することができます。
ただし、上記コードを実行するときは、大量のデータが保存される可能性があるのでご注意ください。
ここまでお読みいただき、ありがとうございました。