はじめに
今まで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以外の場合、問題なく受信できた迷惑メール
に分類個人で検疫からの解放が可能
- 送信元がデフォルトの
まとめ
価格も安価で、ファーストパーティのサービスとして手軽に利用できるが、送信相手側で検疫に引っかかる可能性もあるので、利用シーンには注意が必要。