【入門編】【中級者向け】特定の取引先からのメール受信時に、メール本文の要約をSlackやTeamsのWebhookへ通知する連携ツール – Outlook VBA解析バイブル

スポンサーリンク

Outlook VBAを「自動化の武器」に変える:取引先メールをSlackへ自動転送する極意

こんにちは。現場で泥臭い自動化を積み重ね、Outlookの裏側を覗き続けてきたアーキテクトです。

「マクロの記録」ボタンを押すだけの日常から一歩進み、自分だけの「自動化ツール」を構築したい——そう考えたなら、あなたはもうエンジニアの入り口に立っています。今回は、特定の取引先からのメールを受信した瞬間に、その内容をSlackへ飛ばすという、実務で最も要望が多く、かつ本質が詰まったテーマを扱います。

単にコードを写すだけでは終わりません。なぜそう書くのか、どこで躓きやすいのか、その「設計思想」からお話ししましょう。

—

1. 自動化の心臓部:`ItemAdd` イベントの真実

Outlook VBAでメールを監視するには、`Items` オブジェクトの `ItemAdd` イベントを使います。これは「メールが受信トレイに入った瞬間に叩かれる鐘」のようなものです。

ここで重要なのは、「監視する対象を明確にする」こと。`ThisOutlookSession` モジュールを開き、以下のコードを貼り付けてください。

‘ メールアイテムを監視するための変数を宣言
Public WithEvents TargetFolder As Outlook.Items

Private Sub Application_Startup()
‘ Outlook起動時に受信トレイを監視対象に設定
Dim ns As Outlook.NameSpace
Set ns = Application.GetNamespace(“MAPI”)
Set TargetFolder = ns.GetDefaultFolder(olFolderInbox).Items
End Sub

Private Sub TargetFolder_ItemAdd(ByVal Item As Object)
‘ 受信したアイテムがメールかどうかを判定(重要!)
If TypeOf Item Is MailItem Then
Dim mail As MailItem
Set mail = Item

‘ 特定の送信者かチェック(ここを書き換えてください)
If InStr(mail.SenderEmailAddress, “target-client.com”) > 0 Then
‘ Slackへ送信する処理を呼び出す
Call SendToSlack(mail.Subject, mail.Body)
End If
End If
End Sub

【知見】なぜ `Application_Startup` なのか?

VBAのイベント監視は、一度でもエラーでマクロが停止すると「監視の糸」が切れます。`Application_Startup` で明示的に初期化することで、Outlookを起動するたびに監視体制を再構築する堅牢な設計になります。

—

2. APIの扉を叩く:XMLHTTPオブジェクトの活用

外部チャットツール(Slack等)への送信には、`MSXML2.XMLHTTP` を使います。これは「ブラウザを使わずに裏でWebサイトにアクセスする」ための通信兵です。

Sub SendToSlack(subject As String, body As String)
Dim http As Object
Dim url As String
Dim payload As String

‘ SlackのWebhook URLをここに設定
url = “https://hooks.slack.com/services/XXXXX/XXXXX/XXXXX”

‘ 送信内容(JSON形式)を組み立てる
payload = “{“”text””: “”【要約通知】” & vbCrLf & _
“件名: ” & subject & vbCrLf & _
“内容: ” & Left(body, 50) & “…” & “””}”

Set http = CreateObject(“MSXML2.XMLHTTP”)

‘ APIへPOSTリクエストを投げる
http.Open “POST”, url, False
http.setRequestHeader “Content-Type”, “application/json”
http.send payload

‘ 終了処理
Set http = Nothing
End Sub

【知見】パフォーマンスの重み

`http.send` は同期通信です。あまりに巨大なメールを大量に処理させると、Outlookが一瞬フリーズすることがあります。初心者のうちはこの同期処理で十分ですが、将来的に大量のログを流すようになったら「非同期処理」や「キューイング」を検討する。その視点を持つだけで、あなたはもう中級者です。

—

3. 初心者が必ず躓く「エラー」の正体と対策

このコードを実装すると、いくつかの壁にぶつかるはずです。

  • 「マクロが動かない!」
  • 原因: `Application_Startup` は、コードを書いた後に一度Outlookを再起動しないと走りません。まずは手動で `Application_Startup` の行にカーソルを置いて `F5` キーを押してみてください。
  • 「セキュリティ警告が出て止まる」
  • 原因: Outlookは外部通信を非常に警戒します。セキュリティソフトの設定や、社内のITポリシーを確認してください。
  • 「文字列に改行やダブルクォーテーションが含まれてエラーになる」
  • 原因: JSONは非常に気難しいフォーマットです。本文中に `”`(ダブルクォーテーション)が含まれるとJSONが壊れます。厳密にやるなら、`Replace` 関数で `”` を `\”` に置換するエスケープ処理が必須です。

—

最後に:自動化は「愛」です

「特定の取引先からの連絡を絶対に見逃さない」
「Slackでチーム全員に共有する手間をゼロにする」

こういった小さな自動化は、あなたの、そしてチームの時間を生み出します。今回学んだ `ItemAdd` イベントと `XMLHTTP` 通信さえマスターすれば、次は「Teamsへ投稿する」「Excelにログを書き出す」「添付ファイルをOneDriveへ自動保存する」といった応用が無限に広がります。

まずはこのコードを動かすところから。分からないことがあれば、またいつでも聞きに来てください。あなたのエンジニアリングライフを応援しています。

タイトルとURLをコピーしました