先日の記事でも触れましたが、Azure Communication Services にメール送信機能が追加されています。
今回は、実際にリソースを作成してメールを送信できるところまで試してみます。
必要なリソースを作成する
Azure Communication Services
既存のACSリソースです。いつも通り作ればいいかと思いきや注意点が一つあります。
データの場所を「United States」にしてください。
他のリージョンではメールサービスへの接続に失敗するようです。
メール通信サービス
メールサービス用のリソースが別途必要になります。
こちらは既存のAzure Communication Services リソースのブレードからも作成可能です。
「リージョン」や「Data location」は選択できそうな見た目をしてますがそれぞれ「グローバル」と「United States」しか選択肢がありません。
メールドメイン
作成したメール通信サービスの「ドメインをプロビジョニングする」ブレードを選択し、「ドメインの追加」→「Azureドメイン」とクリックしてください。
しばらく待つと、自動でメール送信に必要なドメインが作成されます。
「Display name」の横のeditをクリックして表示名を編集しておきましょう。
リソース間の接続
Azure Communication Services のリソースに戻り、「ドメイン」ブレードから接続していきます。
ここまで作ったメール通信サービスのリソースとメールドメインを選択して接続をクリックすればOKです。
しばらく待つと、無事接続できたことが確認ます。
Azure Communication Services のデータの場所をUS以外にしていると、このタイミングで接続に失敗してしまいます。
その場合はAzure Communication Services のリソースのみをUSで作りなおせば大丈夫です。
メールを呼び出すプログラムを書く
今回はVS2022を使ってC#で書いてみたいと思います。
簡単のため、まっさらなコンソールアプリのプロジェクトを作成したものとして話を進めます。
NuGet パッケージを追加する
NuGet パッケージ マネージャーを開き、参照のタブの検索窓に「Azure.Communication.Email」と入力し、Microsoftが出しているパッケージをインストールします。
(今なら世界で3桁番目にこのパッケージをインストールした人類になれる…?)
コードを書く
ややこしいことはさておき、.NET6の場合のコードを以下に示します。
それ以外のランタイムを使いたい方は適当に読み替えてください。
using Azure;
using Azure.Communication.Email;
using Azure.Communication.Email.Models;
var connectionString = @"<ACSの接続文字列>";
EmailClient emailClient = new EmailClient(connectionString);
EmailContent emailContent = new EmailContent("ここがタイトルになります");
emailContent.PlainText = "ここが本文になります";
List<EmailAddress> emailAddresses = new List<EmailAddress> { new EmailAddress("<送り先のメールアドレス>") { DisplayName = "Friendly Display Name" } };
EmailRecipients emailRecipients = new EmailRecipients(emailAddresses);
EmailMessage emailMessage = new EmailMessage("<設定したメールドメイン>", emailContent, emailRecipients);
SendEmailResult emailResult = emailClient.Send(emailMessage, CancellationToken.None);
Response<SendStatusResult> messageStatus = null;
messageStatus = emailClient.GetSendStatus(emailResult.MessageId);
Console.WriteLine($"MessageStatus = {messageStatus.Value.Status}");
TimeSpan duration = TimeSpan.FromMinutes(3);
long start = DateTime.Now.Ticks;
do
{
messageStatus = emailClient.GetSendStatus(emailResult.MessageId);
if (messageStatus.Value.Status != SendStatus.Queued)
{
Console.WriteLine($"MessageStatus = {messageStatus.Value.Status}");
break;
}
Thread.Sleep(10000);
Console.WriteLine($"...");
} while (DateTime.Now.Ticks - start < duration.Ticks);
メールを投げっぱなしでよいなら13行目までで十分です。
それ以降はコンソールに送信状態を表示しようとしています。
実行するとコンソールの表示は以下のようになります。
上記で実際に送信した結果をWeb版Outlookで確認すると以下のようになります。
無事メールが送れてそうですね。
まとめ
今回はBuild2022で発表されたばかりのメールサービスを実際にしようしてみました。
リソースのリージョンというハマりポイントはあったものの、あとはボタンポチポチとチュートリアルのコードコピペでメールを送信することができました。
とっても簡単で便利なので、実務でも即実践投入できそうな気配があります。
本記事が少しでも助けになれば幸いです。