Power AutomateとSendGridの良い関係

オフィスワーク モダナイズ への道

 Microsoft365からメール送信を行う場合はOutlookを利用して、Power AutomateやPowerAppsから送信が可能です。ただし、あくまでも個人のアカウントからのメール送信となるとめ、お客様への案内メールなど送信する場合は別途専用アカウント用意する必要などがあります。今回は外部のSMTPリレーサービスとPower Automateを組み合わせてお客様への案内メールを送信する方法を紹介します。

ゴールイメージ

 今回のゴールとして、”info@sg.win1.work”という送信者アドレスからお客様へ案内メールを送信できること。加えて、“info@sg.win1.work”宛てに送られたメールを、MIcrosft365の個人アカウント“higuchi@m365.win1.jp”で受信するまでを目指します。

※正確にはメールの受信はSMTPでメールサーバーに送られてきたものをPOP3やIMAP、MAPIで受信します。

SendGrid

 インターネットサービスの中にはお客様向けの案内メールなどを送信するためのサービスが数多く提供されています。その中で、今回利用するサービスは「SendGrid(https://sendgrid.kke.co.jp/)」を選択しました。こちらのサービスは検証用に個人で利用する程度であれば無料で利用可能なメール配信サービスです。
こちらのサービスを利用できるようにセットアップを行います。
まずはTopページの「無料ではじめる」から新期会員登録を行います。

差出人情報の登録

 アカウントが発行されたら、差出人情報の登録を行います。サインイン後、ダッシュボードの左メニューから「Marketing」-「Sendars」-「Create Sender」を選択します。

From Nameメール送信者として表示される名前
From Email Address送信者メールアドレス
Reply To返信先メールアドレス
Company Address会社(個人)住所
Nickname差出人情報を管理するための名前

こちらの情報を登録します。

登録したメールアドレス宛に確認メールが届きますので承認します。

「VERIFIED」にチェックマークが付けば差出人情報の登録は完了です。

APIキーの取得

 SendGridのサービスを利用するためのAPIキーを取得します。
ダッシュボードの左メニューから「Settings」-「Create API Key」を選択します。
キーの名前を入力して、「Full Access」を選択して「Create & View」を選択します。

発行されたキーを保存しておきます。

メール送信テスト

 ここまでの設定で、SendGridのSMTPサービスが利用できるか、メールを送信して確認します。
PowerShellからAPIキーを設定してメール送信を行ってみましょう。

$Smtp = "smtp.sendgrid.net" 
$Port = 2525
$Encode = [System.Text.Encoding]::UTF8
$Account = "apikey"
$Password = "<取得したAPIキー>" | ConvertTo-SecureString -AsPlainText -Force
$Credential = New-Object System.Management.Automation.PSCredential $ Account,$ Password

$FromAddress = "higuchi@m365.win1.jp"
$ToAddress = " higuchi@m365.win1.jp"
$Subject = "SGTestMail"
$Body = @"
メールテストです。
"@

Send-MailMessage `
    -To $ToAddress `
    -From $FromAddress `
    -SmtpServer $Smtp `
    -Credential $Credential `
    -UseSsl `
    -Encoding $Encode `
    -Port $Port `
    -Subject $Subject `
    -Body $Body

自分から自分宛てに送信したメールですが、無事届いています。最初の設定としてはOKです。

Power Automateでクラウドフローの作成

 SendGridにはメールが届いたタイミングで任意のWebhookを利用する機能が提供されています。これを利用して、お客様から返信されたメールの宛先アドレスを実際に受信できるメールアドレスに変換する仕組みをPower Automateのクラウドフローで実装します。具体的には、お客さまからの返信メールの受信者アドレス info@sg.win1.work を higuchi@m365.win1.jp に変換した後、メールをSendGridのAPIを利用して送信します。この機能をSendGridからWebhookで呼び出すことになります。
フロー全体は以下となります。

フロー内のいくつかポイントを解説しておきます。

  • 呼び出されるWebhookのUrlを提供する「HTTP要求の受信時」トリガーはプレミアムコネクタとなります。
  • 件名、本文、送信者、受信者はそれぞれ変数を作成して格納しています。取得するパラメーターはSendGridの解説ページ「Setting Up The Inbound Parse Webhook(https://docs.sendgrid.com/for-developers/parsing-email/setting-up-the-inbound-parse-webhook)」内の「Default Parameters」を参考に、それぞれ「triggerFormDataValue」関数を使って以下のように取得しています。
Subject triggerFormDataValue(‘subject’)
BodytriggerFormDataValue(‘text’)
FromtriggerFormDataValue(‘from’)
TotriggerFormDataValue(‘to’)
  • 「HTTP」アクションでは、SendGridのWebAPIを利用してメール送信を行います。「トランザクションメールを送信する」を参考に、URI,、jsonデータを設定します。
  • jsonデータには宛先として”higuchi@m365.win1.jp”を指定しています。
  • authorizationには、“Bearer <取得したAPIキー>”という書式で指定します。

以上で、クラウドフローが完成したので、「HTTP要求の受信時」トリガーに表示されている「HTTP POST の URL」の値を取得しておきます。こちらがWebhookの呼び出しUrlとなります。

MXレコードの登録

SendGridでお客様の返信メールを受け取るには、返信アドレスとなる ”info@sg.win1.work” のドメイン”sg..win1.wok”のMXレコードを”mx.sendgrid.net”としてDNSに登録する必要があります。お名前.comを例にするとこのようになります。
この設定によって、”info@sg.win1.work” のメールがSendGridのサーバーに送られることになります。

ドメインの登録

 SendGridで“sg.win1.work”このドメインのメールを受信できるようにドメインの登録を行います。ダッシュボードの左メニューから「Settings」-「Sender Authentication」-「Get Started」を選択します。

お名前.com利用の場合は、「DNShost」は“Other Host(Not Listed)”、「Wichi DNS Host」はお名前.comのDNSサーバーのホスト名“01.dnsv.jp”を入力します。

認証するドメインには“win1.work”を入力します。

画面上にCNAMEの一覧が表示されますので、こちらすべてをDNSサーバーに登録します。

お名前.comを例にするとこのようになります。

DNSの登録が完了したら、「Verfy」ボタンを選択します。この画面が表示されればドメインの登録完了となります。

Inbound Parse Webhookの設定

 SendGridでメールが届いたタイミングで任意のWebhookを利用するために「Inbound Parse Webhook」の設定を行
います。ダッシュボードの左メニューから「Settings」-「Inbound Parse」-「Add Host & URL」を選択します。

テスト実行

 全ての設定が完了したとこをで、今回の目的となる動作を一通り実行してみましょう。
まずはお客様へ案内メールを送信します。送信元”info@sg.win1.work”からお客様アドレスの” customer20221028@outlook.jp”へSendGrid経由でメールを送信します。

$Smtp = "smtp.sendgrid.net" 
$Port = 2525
$Encode = [System.Text.Encoding]::UTF8
$Account = "apikey"
$Password = "<取得したAPIキー>" | ConvertTo-SecureString -AsPlainText -Force
$Credential = New-Object System.Management.Automation.PSCredential $ Account,$ Password

$FromAddress = "info@sg.win1.work"
$ToAddress = "customer20221028@outlook.jp”
$Subject = "お客様へのご案内"
$Body = @"
お客様へのご案内メールのテスト送信です。
よろしくお願いいたします。
"@

Send-MailMessage `
    -To $ToAddress `
    -From $FromAddress `
    -SmtpServer $Smtp `
    -Credential $Credential `
    -UseSsl `
    -Encoding $Encode `
    -Port $Port `
    -Subject $Subject `
    -Body $Body

お客様にメールが配信されました。このメールに返信します。返信先は”info@sg.win1.work”です。

SendGridからPower Automateのクラウドフローが呼び出され、”higuchi@m365.win1.jp”へメールが転送され受信ができました。

 以上、Power Automateと SendGridの機能を組み合わせたメール転送サービスの構築方法となります。WebhookやWeb APIをフル活用することで、単体では機能不足なサービスも、色々と組み合わせて機能補強が図れるようになります。今回は最初のメール送信部分をPowerShellのコードで記載していますが、こちらもローコード開発が当然可能です。プラグラムを一行も書かずにメール転送サービスが構築可能ということです。Microsoft365やSendGrid以外にも数えきれないくらいのWebサービスが提供されていますので、組み合わせ次第では最強のシステムの開発ができそうです。

著書の紹介欄

Hyper-Vで本格的なサーバー仮想環境を構築。仮想環境を設定・操作できる!

できるPRO Windows Server 2016 Hyper-V

◇Hyper-Vのさまざまな機能がわかる ◇インストールからの操作手順を解説 ◇チェックポイントやレプリカも活用できる Windows Server 2016 Hyper-Vは、仮想化ソフトウェア基盤を提供する機能であり、クラウドの実現に不可欠のものです。 本書では、仮想化の基礎知識から、Hyper-Vでの仮想マシンや仮想スイッチの設定・操作、プライベートクラウドの構築、Azureとの連携などを解説します。

初めてのWindows Azure Pack本が発売

Windows Azure Pack プライベートクラウド構築ガイド

本書は、Windows Azure PackとHyper-Vを利用し、企業内IaaS(仮想マシン提供サービス)を構成するための、IT管理者に向けた手引書です。試用したサーバーは、最小限度の物理サーバーと仮想マシンで構成しています。Windows Azure Packに必要なコンポーネントのダウンロード、実際にプライベートクラウド構築する過程を、手順を追って解説しています。これからプライベートクラウドの構築を検討するうえで、作業負担の軽減に役立つ一冊です。

ブログの著者欄

樋口 勝一

GMOインターネットグループ株式会社

1999年6月GMOインターネットグループ株式会社に入社。Windows Serverをプラットフォームとしたサービス開発から運用・保守まで幅広く担当。講演登壇や出版、ネット記事連載などでマイクロソフト社と強い信頼関係を構築。「マイクロソフトMVPアワード」を15度受賞し、インターネットソリューションのスペシャリストとして活躍。

採用情報

関連記事

KEYWORD

採用情報

SNS FOLLOW