Azure VMからメール送信する その1の続きです。次は、SendGridからメール送信する方法です。
1. SendGridの作成
AzureポータルのMarketplaceから「sendgrid」と検索すると、「Twilio SendGrid」を見つけることができます。
作成画面では、リソース名とプランを選択します。自動更新は既定では「オン」になっています。
作成したら、「Twilio SendGrid に登録」という画面が表示されます。今ログインしているEntra IDアカウントでSSOするための設定になります。
「アカウントの構成」ボタンをクリックして、画面に従ってサインインします。アクセス許可を求められるので、「承諾」ボタンをクリックします。
そうしたら、以下の画面が表示されるので、画面に従って必要事項を入力します。(Company Nameなども要求されるのですが、検証するときは適当なものでも大丈夫でした)
その後、SendGridのダッシュボード画面が開きます。
2.送信元メールドメイン登録
ダッシュボード > Settings > Sender Authentication の順にクリックすると、ドメイン登録の画面が開きます(厳密にはSPF/DKIM登録のページです)。
画面にある「Domain Authentication」の項目の「Get Started」をクリックして登録を開始します。ドメインレジストラから有効なドメインを取得していることが前提となります。
①と②をそれぞれ設定します。「DNS Host」では、権威DNSとなっているDNSサービスをリストから選択します。リスト中になければ、「Other Host」や「I'm Not Sure」でも構いません。②は「No」のままで構いません(後ほどでも設定できます)。
注意
以前に問い合わせしたことがあるのですが、「DNS Host」では、DNSサービスを選択できますが、これを選択しても直接DNSサービスのDNSサーバに問い合わせされるわけではありません。同様に、Other Hostを選択して、「Which DNS Host?」にDNSサーバのIPアドレスを記入しても、そのIPのサーバに問い合わせはされません。そのためパブリックに公開されている権威DNSサーバにレコード登録されている必要があります。まだ外部に公開したくないので、権威DNSから委任していないDNSサーバに問い合わせてドメイン検証させる、ということはできません。
次に、使用したいドメイン名を入力します。ここで指定したドメインがメールアドレスとして使用できるようになります。メールアドレスは、<名前>@<ここで設定したドメイン> となります。
次に、ドメインの一覧が表示されるのでこれを、DNSサーバに登録します。登録したら、画面下部の「I've added these records.」にチェックを入れ、「Verify」をクリックします。
その後、SendGrid側で名前解決できるか(=できればドメインの所有者であるということ)が検証されされます。レコード登録したばかりでエラーになっても再度検証できるので、時間をおいて試してください。
3.SMTPユーザー登録
SendGridではAPIキーをSMTPユーザー/パスワードとして使用します。左のメニューからSettings > API Keys の順にクリックして登録画面を表示します。「Create API Key」をクリックして登録を開始します。キーの名前とパーミッションを選択して「Create & View」をクリックします。
すると作成され、APIキーが表示されるので、控えておきます(「Done」をクリックすると再表示できません)。
4.メールを送信する
VMのほうで作業します。説明するのはPostfixの例です。
以下のドキュメントに従えばよいです。
はじめに、/etc/postfix/sasl_passwd を作成して、以下の通り記述して保存します。[smtp.sendgrid.net]:587 apikey:は固定文字列です。
[smtp.sendgrid.net]:587 apikey:<3.で作成したAPIキー>
# 例
# [smtp.sendgrid.net]:587 apikey:SG.n5pq_jXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
そのあと、以下のコマンドを実行して、このファイルをPostfixが参照するように設定します。
# chmod 600 /etc/postfix/sasl_passwd
# postmap hash:/etc/postfix/sasl_passwd
Postfixの設定ファイル /etc/postfix/main.cf で以下の通り追記します。
relayhost = [smtp.sendgrid.net]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_tls_security_level = encrypt
header_size_limit = 4096000
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
設定できたらPostfixを再起動してください。
では、メールを送信してみます。(簡易的にtelnetで送信してみます)
以下のようにコマンドを実行します
$ telnet localhost 25 # TELNETで接続を開始する
220 xxx ESMTP Postfix # 220が返ってくればOK
MAIL FROM: <適当な名前>@<2.で登録したドメイン>
250 2.1.0 Ok # 250が返ってくればOK
RCPT TO: <宛先メールアドレス>
250 2.1.0 Ok # 250が返ってくればOK
DATA
from: <適当な名前>@<2.で登録したドメイン>
subject: <メールのタイトル>
<本文>
. # 最後に[.](ドット)を入力してEnter
250 2.0.0 Ok: queued as C7E91C00207 # 250が返ってくればOK
QUIT
221 2.0.0 Bye
Connection closed by foreign host.
これでメールが送信できたはずです。
さいごに
メールを送信する、という点ではSendGridのほうが手順が簡単でした。ただし、Azure Communication Serviceもある程度Azureをさわったことがあれば、さほど難しいようには感じませんでした。
価格面では、Azure Communication Serviceは従量課金なので、検証などで手軽に送信環境が欲しいといったケースでは有利だと感じました。SendGridだと、Azureからの購入では最低でも¥2500/月 以上(2025/4現在)は固定でかかります(本家Twilioや日本の代理店である構造計画研究所から購入すれば、60日間無料のプランもあります)。逆に、本番環境で大量のメール送信がある場合は、ケースに応じてどちらが価格的に有利か変わってくるかと思います。
機能面では、専業だけあってSendGridのほうが多彩な機能があります。サポートですが、Azure Communication Serviceは通常通りAzureポータルからサポートリクエストを起票すれば問い合わせできます。ただし、SendGridは日本の代理店である構造計画研究所ではなく、本家のTwilioからの購入になるので、Twilioに問い合わせが必要です。そのため日本語で問い合わせることができません。なので、問い合わせが頻発することが見込まれるのであれば、構造計画研究所から購入することも検討してもよいかと思います。











