こんにちは、なかぜんです。
Accessで「メールを自動で送りたい」と思ったとき、DoCmd.SendObject
や Outlook操作のVBAを使うのが一般的ですよね。でも、Outlookの警告や環境による制限、さらには365環境の違いなどに悩まされること…ありませんか?
そんな悩みを解決するのが「Power Automate」との連携です。Access側はVBAでHTTPリクエストを送り、Power Automateがメール送信を担当するという構成にすれば、安全かつ柔軟な運用が実現できます。
全体構成と仕組み
今回の連携構成は以下のようになります。
- Access VBAでメール情報(宛先・件名・本文)をJSON形式で整形
- Power Automateの「HTTPリクエストを受信したとき」トリガーにPOST送信
- Power Automateで受け取った内容を元にOutlookでメール送信
それでは、順を追って解説していきますね。
Power Automateフローの作成
1. HTTPトリガーでフローを開始
Power Automateで新規フローを作成し、トリガーに「HTTPリクエストを受信したとき」を選択します。
JSONスキーマは以下のように設定します。
{
"type": "object",
"properties": {
"to": { "type": "string" },
"subject": { "type": "string" },
"body": { "type": "string" }
}
}
2. メール送信アクションの追加
次に「Outlookでメールを送信」アクションを追加し、以下のように設定します。
- 宛先:
@{triggerBody()?['to']}
- 件名:
@{triggerBody()?['subject']}
- 本文:
@{triggerBody()?['body']}
これでPower Automate側の準備は完了です。保存後、トリガーURLが表示されるのでコピーしておきましょう。
Access VBA側のコード
次に、AccessからPower Automateを呼び出すためのVBAコードを紹介します。
Public Sub SendMailViaPowerAutomate()
Dim objHTTP As Object
Dim url As String
Dim jsonBody As String
url = "https://prod-xx.japaneast.logic.azure.com:443/workflows/xxxxxxx/triggers/manual/paths/invoke?api-version=2016-10-01&sp=xxx&sv=1.0&sig=xxxxxxxx" ' ← フローのURLに置き換えてください
jsonBody = "{""to"":""test@example.com"",""subject"":""Accessからの通知"",""body"":""これはPower Automate経由のメールです。""}"
Set objHTTP = CreateObject("MSXML2.XMLHTTP")
With objHTTP
.Open "POST", url, False
.setRequestHeader "Content-Type", "application/json"
.Send jsonBody
If .Status = 200 Then
MsgBox "送信成功!", vbInformation
Else
MsgBox "送信失敗: " & .Status & vbCrLf & .responseText, vbExclamation
End If
End With
End Sub
ポイント解説:
MSXML2.XMLHTTP
でHTTPリクエスト送信- JSONはダブルクォーテーションを
""
でエスケープ - APIのURL末尾の
sig=xxx
を忘れずに
よくあるミスと注意点
- VBA側でURLが切れている: フローURLが長いので、途中で改行や文字切れしていないか確認
- JSONの構文エラー: 特に”のエスケープミスで送信が失敗します
- HTTPリクエストが失敗: Proxy環境やセキュリティ設定でブロックされていないか確認
応用ポイント:フォーム連携やHTMLメール
宛先や本文をフォーム入力から動的に取得することで、より実用的な活用ができます。
jsonBody = "{""to"":""" & Nz(Me.txtEmail, "") & """, ""subject"":""自動通知"", ""body"":""商品:" & Nz(Me.txtItemName, "") & " の在庫が不足しています。""}"
また、Power Automateのメール送信アクションで「HTML形式で送信」をONにすれば、装飾付きのメールも可能です。
まとめ:Accessの可能性を広げよう
今回は、AccessからPower Automateを使ってメール送信する方法を紹介しました。
ポイントをまとめると…
- Power Automateを使えば環境依存を回避しやすい
- VBAからHTTP POSTでフローを呼び出せば柔軟な連携が可能
- 動的な値やHTML形式の送信にも対応できる
業務アプリにメール通知を組み込みたい方にとって、今回の手法は大きな武器になるはずです。
今後は「ファイル添付」や「エラー通知の自動送信」などにも発展させていけますので、ぜひチャレンジしてみてくださいね。
それでは、また次回の記事でお会いしましょう。
なかぜんでした!
