HTML 形式で受信したメール本文から、getElementsByTagName というような形で取得情報の絞り込みを行う方法について残しておきます。
1. 参照設定
まず、参照設定として、次の2つのライブラリを読み込んでおきます。
・Microsoft Outlook 16.0 Object Library
・Microsoft HTML Object Library
なお、16.0
というのは、アプリケーションのバージョンなので、環境によって異なる場合もあると思います。
2. サンプルコード
以下のコードは、メール本文を HTML ドキュメントに変換して、getElementsByTagName メソッドで必要な要素を取得するものです。
なお、このコードでは、受信トレイにあるメールを全てループ処理します。
メール数が1000以上あるような場合は、このまま実行せず、ループ数を調整するようにしてください。
Sub GetReceivedEmailByHtml()
Dim objOutlook As New Outlook.Application 'Outlookオブジェクト生成
Dim myNamespace As Outlook.Namespace: Set myNamespace = objOutlook.GetNamespace("MAPI") 'Outlook の NameSpace オブジェクトを取得
Dim myFolder As Folder: Set myFolder = myNamespace.GetDefaultFolder(olFolderInbox) '受信トレイフォルダーを取得
Dim html As New HTMLDocument 'HTMLDocumentオブジェクト生成
Dim i As Long, j As Long
On Error Resume Next '取得時にエラーが出る場合を回避(配信不能のお知らせメールなど)
For i = 1 To myFolder.Items.Count '受信トレイのメール数だけループする
Debug.Print myFolder.Items.Item(i).SenderEmailAddress '送信者アドレス
Debug.Print myFolder.Items.Item(i).ReceivedTime '受信時間
Debug.Print myFolder.Items.Item(i).SentOn '送信時間
Debug.Print myFolder.Items.Item(i).Subject '件名
Dim htmlBody As String: htmlBody = myFolder.Items.Item(i).htmlBody 'HTML本文
html.Body.innerHTML = htmlBody 'HTMLドキュメントに変換して格納
Debug.Print html.Body.getElementsByTagName("a")(0).outerHTML 'aタグのうち最初に見つかったものを出力
Next i
On Error GoTo 0
End Sub
3. 簡単な説明
VBA で Outlook の受信メールを取得する方法の基本的なことは、こちらを参照してください。
以下、要点だけ書いておきます。
3-1. メール本文を HTML 形式で取得
次のところで、受信トレイのメールから、HTML形式(テキスト)で受信メールを取得しています。
htmlBody = myFolder.Items.Item(i).htmlBody
myFolder
は受信トレイとなります。
続く Items.Item(i)
で、メールを1つずつ取り出しています。
最後の htmlBody
で HTML 形式のテキストで本文を取得しています。
3-2. HTMLDocument オブジェクトに変換
上記で、HTML 形式で取得した本文データはテキストデータのため、そのままでは getElementsByTagName
メソッドなどを使用して要素の取得をすることはできません。
これを、HTML ドキュメントとして扱うために、HTMLDocument オブジェクト
を使用します。
3-2-1. HTMLDocument オブジェクトのインスタンス作成
次の1行で HTMLDocument オブジェクトのインスタンスを作成しています(HTML ドキュメントを格納する入れ物)。
これには Microsoft HTML Object Library
の参照設定が必要になります。
Dim html As New HTMLDocument 'HTMLDocumentオブジェクト生成
なお、参照設定をしない場合は、次のように書きます。
Dim html As Object
Set html = CreateObject("htmlfile") 'HTMLDocumentオブジェクト生成
3-2-2. HTML ドキュメントに変換
次の1行で、テキストデータ(htmlBody)を、HTML ドキュメントに変換しています。
html.Body.innerHTML = htmlBody
以上で、html
を HTML ドキュメントととして操作することが可能になります。
あとは、スクレイピングの際と同じ手法で、要素を特定していくことができると思います。
<参考サイト>
・エクセルVBAでIEを使わずにHTMLドキュメントを取得する方法