VBA 通知メール拡張版(HTMLメールにグラフやアイコン画像を埋め込む)
テキストや表だけでなく、グラフやアイコン画像をHTMLメールに埋め込むと、通知がさらに視覚的に分かりやすくなります。ここでは「CDO.Message」を使った HTMLメール+画像埋め込み のサンプルを紹介します。
基本の考え方
- HTMLメール本文に
<img>タグを使う - 画像は以下の方法で埋め込み可能
- 外部URL参照(例:Web上のアイコン画像)
- 添付ファイルを本文に埋め込み(Content-IDを利用)
外部URL参照版(簡易)
Sub SendSuccessMailHTMLWithIcon(successMsg As String)
Dim objMsg As Object
Dim objConf As Object
Set objMsg = CreateObject("CDO.Message")
Set objConf = CreateObject("CDO.Configuration")
' SMTP設定(例:Office365)
With objConf.Fields
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.office365.com"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 587
.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "your_account@domain.com"
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "your_password"
.Update
End With
With objMsg
Set .Configuration = objConf
.From = "your_account@domain.com"
.To = "admin@domain.com"
.Subject = "【VBAタスク成功通知】"
' HTML本文(外部アイコン画像を利用)
.HTMLBody = _
"<html><body>" & _
"<h2 style='color:green;'>✅ VBAタスク成功通知</h2>" & _
"<p><img src='https://upload.wikimedia.org/wikipedia/commons/thumb/5/50/Yes_Check_Circle.svg/120px-Yes_Check_Circle.svg.png' width='40' height='40'></p>" & _
"<p><b>処理が正常終了しました。</b></p>" & _
"<table border='1' cellpadding='5' style='border-collapse:collapse;'>" & _
"<tr><th>日時</th><td>" & Format(Now, "yyyy/mm/dd hh:nn:ss") & "</td></tr>" & _
"<tr><th>詳細</th><td>" & successMsg & "</td></tr>" & _
"</table>" & _
"</body></html>"
.Send
End With
End Sub
VB👉 外部URLを参照するので簡単ですが、受信環境によっては画像がブロックされる場合があります。
添付ファイルを本文に埋め込む版(Content-ID利用)
Sub SendErrorMailHTMLWithIcon(errMsg As String)
Dim objMsg As Object
Dim objConf As Object
Set objMsg = CreateObject("CDO.Message")
Set objConf = CreateObject("CDO.Configuration")
' SMTP設定(同上)
With objConf.Fields
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.office365.com"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 587
.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "your_account@domain.com"
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "your_password"
.Update
End With
With objMsg
Set .Configuration = objConf
.From = "your_account@domain.com"
.To = "admin@domain.com"
.Subject = "【VBAタスクエラー通知】"
' 添付ファイルを本文に埋め込み(例:error.png)
objMsg.AddAttachment "C:\Scripts\error.png"
' HTML本文(添付画像を Content-ID で参照)
.HTMLBody = _
"<html><body>" & _
"<h2 style='color:red;'>❌ VBAタスクエラー通知</h2>" & _
"<p><img src='cid:error.png'></p>" & _
"<p><b>エラーが発生しました。</b></p>" & _
"<table border='1' cellpadding='5' style='border-collapse:collapse;'>" & _
"<tr><th>日時</th><td>" & Format(Now, "yyyy/mm/dd hh:nn:ss") & "</td></tr>" & _
"<tr><th>エラー詳細</th><td>" & errMsg & "</td></tr>" & _
"</table>" & _
"</body></html>"
.Send
End With
End Sub
VB👉 添付ファイルを本文に埋め込むので、受信側で確実に表示されます。
実務でのメリット
- アイコン画像で成功/失敗を直感的に把握
- グラフや図を埋め込めば進捗や統計も一目で分かる
- HTMLメール+画像埋め込みで通知が「見やすく・分かりやすく」なる
✅ まとめ
- 外部URL参照 → 簡単だが環境依存あり
- 添付ファイル埋め込み → 確実に表示される
- 成功/失敗通知をアイコンやグラフで強調できる


