1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【VBA】Outlook の受信メールを HTML ドキュメントに変換して要素を取得する

Last updated at Posted at 2021-08-22

HTML 形式で受信したメール本文から、getElementsByTagName というような形で取得情報の絞り込みを行う方法について残しておきます。

1. 参照設定

まず、参照設定として、次の2つのライブラリを読み込んでおきます。
・Microsoft Outlook 16.0 Object Library
・Microsoft HTML Object Library
2021-08-22 141355.png
なお、16.0 というのは、アプリケーションのバージョンなので、環境によって異なる場合もあると思います。

2. サンプルコード

以下のコードは、メール本文を HTML ドキュメントに変換して、getElementsByTagName メソッドで必要な要素を取得するものです。

なお、このコードでは、受信トレイにあるメールを全てループ処理します。
メール数が1000以上あるような場合は、このまま実行せず、ループ数を調整するようにしてください。

メール本文をHTML形式で取得
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形式(テキスト)で受信メールを取得しています。

Sample
    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 の参照設定が必要になります。

Sample
    Dim html As New HTMLDocument 'HTMLDocumentオブジェクト生成

なお、参照設定をしない場合は、次のように書きます。

Sample(参照設定をしない場合)
    Dim html As Object
    Set html = CreateObject("htmlfile") 'HTMLDocumentオブジェクト生成

3-2-2. HTML ドキュメントに変換

次の1行で、テキストデータ(htmlBody)を、HTML ドキュメントに変換しています。

Sample
    html.Body.innerHTML = htmlBody

以上で、html を HTML ドキュメントととして操作することが可能になります。
あとは、スクレイピングの際と同じ手法で、要素を特定していくことができると思います。

<参考サイト>
エクセルVBAでIEを使わずにHTMLドキュメントを取得する方法

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?