スポンサーリンク

Accessからのメール送信をPower Automate化する

スポンサーリンク
Access
スポンサーリンク

こんにちは、なかぜんです。

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形式の送信にも対応できる

業務アプリにメール通知を組み込みたい方にとって、今回の手法は大きな武器になるはずです。

今後は「ファイル添付」や「エラー通知の自動送信」などにも発展させていけますので、ぜひチャレンジしてみてくださいね。

それでは、また次回の記事でお会いしましょう。
なかぜんでした!