はじめに
今までAzureでメール送信する場合は、SendGridなどのサードパーティサービスを利用するのが一般的でした。
※Azure公式でもそのように案内していた。
しかし気付けばAzureから公式にメールを送ることのできるファーストパーティサービス「Azure Communication Services Email」が登場していたので、今回使ってみる!
注意
AzureでVMを立ててSMTPサーバーを構築してメールを送る手法は非推奨・サポート外です。
Azure VMでは、グローバルIPを使いまわしている形となっているので、悪意あるユーザーがAzure VMからスパムメールを送った場合、その時のグローバルIPがブラックリスト登録されてしまい、後から別のAzure VMにそのグローバルIPが割り当てられてしまう可能性があるようです。
必要なリソース
メール送信をするためには、以下の3つのリソースが必要です。
※わかりにくい・・・
- 通信サービス
- メール通信サービス
- メール通信サービス ドメイン
利用料金
利用した分の従量課金となります。
- 送信メール数
- $0.00025 / 1通
- メールサイズ
- $0.00012 / MB
たとえば1ヶ月あたり、1MBのメールを1000通送る場合、以下のようになります。
※1ドル=147.43円換算
- 送信メール数
- 1000通 × $0.00025 = $0.25(¥36.86)
- メールサイズ
- 1MB × 1000通 × $0.00012 = $0.12(¥17.69)
- 合計
- $0.37(¥54.55)
思ったより安いですね!
制限事項
メール送信の制限が少し厳しめです。
- レート制限(1サブスクリプションあたり)
- 1分あたり :
30通 - 1時間あたり :
100通
- 1分あたり :
- サイズ制限
- 受信者の数 :
50人 - 合計サイズ (添付ファイルを含む) :
10MB
- 受信者の数 :
制限の引き上げについて
あとから制限を引き上げることも可能だそうです。
https://learn.microsoft.com/ja-jp/azure/communication-services/concepts/service-limits#action-to-take-3
メールを送信して送信者の評判を確立したら、送信ボリュームの制限の引き上げを要求できます。
レート制限を 超える量のメッセージを送信する必要がある場合は、必要なメール送信制限を引き上げるサポート リクエスト を送信します。
メール クォータの引き上げ要求は自動的には承認されません。
レビュー チームは、全体的な送信者の評判を考慮します。
これには、メール配信の失敗率、doメインの評判、承認状態を決定するときのスパムと不正使用のレポートなどの要因が含まれます。
通信サービスの作成
注意
ここの「データの場所」は、作成するリソース全てで合わせる必要あり
メール通信サービスの作成
注意
ここの「Data location」は、先ほど作成した通信サービスと同じリージョンに設定する必要あり
メール通信サービス ドメインの作成
先ほど作成したメール通信サービスを開き、「ドメインをプロビジョニングする」を選択し、「Azure ドメイン」を選択します。

ドメインの作成には少し時間がかかるので、終わるまでしばらく待ちましょう。

完了するとこのような画面になります。

作成したドメインを接続する
先ほど作成したドメインをメール通信サービスに接続します。
メール通信サービスを開き、「ドメイン」を選択し、「ドメインを接続する」を選択します。

メールドメインの接続画面が表示されるので、先ほど作成したメール通信サービス ドメインの情報を設定して「接続」ボタンを選択します。

完了メッセージが表示されればOK。

これで一通りの設定が完了しました。
実際にプログラムから使ってみる
今回はC#でメール送信するプログラムを書いてみます。
※別に言語は何でも良いので、ここは読み飛ばしてもらってもOK
using Azure;
using Azure.Communication.Email;
// 接続文字列
string connectionString = "endpoint=<通信サービスのエンドポイント>;accesskey=<通信サービスのアクセスキー>";
var emailClient = new EmailClient(connectionString);
var senderAddress = "<送信元メールアドレス(ドメインの接続時に表示される「メール送信元」)>";
var recipientAddress = new EmailRecipients(new EmailAddress[] { new EmailAddress("<送信先メールアドレス>") });
var content = new EmailContent(subject: "テスト メール")
{
PlainText = "メールで Hello World。"
};
var emailMessage = new EmailMessage(senderAddress, recipientAddress, content);
var emailSendOperation = await emailClient.SendAsync(WaitUntil.Completed, emailMessage);
Console.WriteLine($"Email send operation ID: {emailSendOperation.Id}");
いざ実行!ポチッ!
余談
Gmailだと問題なくメールが届いたが、会社で利用しているMS365 Outlookに送信した場合、検疫に引っかかってメールが届かなかった。

注意
検疫の引っかかり方も、Azureドメインを使用した場合とカスタムドメインを使用した場合で少し挙動が違ったので注意が必要。
- Azureドメインを使用した場合
- 送信元がデフォルトの
DoNotReply@作成したドメインの場合、High Confidence Phishに分類- 管理者でないと検疫の一覧に出てこないので、個人では検疫からの解放は不可
-
user1@作成したドイメインなどDoNotReply以外の場合、迷惑メールに分類- 個人で検疫からの解放が可能
- 送信元がデフォルトの
- カスタムドメイン(SPF, DKIM設定済み)を使用した場合
- 送信元がデフォルトの
DoNotReply@作成したドメインの場合、フィッシング詐欺に分類- 個人で検疫からの解放が可能
-
user1@作成したドイメインなどDoNotReply以外の場合、問題なく受信できた迷惑メールに分類個人で検疫からの解放が可能
- 送信元がデフォルトの
まとめ
価格も安価で、ファーストパーティのサービスとして手軽に利用できるが、送信相手側で検疫に引っかかる可能性もあるので、利用シーンには注意が必要。



