Azure からメール送信!? Azure Communication Services のメール機能を最速で試してみた!!# Azure リレー
2022-06-15
azblob://2022/11/11/eyecatch/2022-06-14-azure-email-000.jpg

先日の記事でも触れましたが、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で発表されたばかりのメールサービスを実際にしようしてみました。

リソースのリージョンというハマりポイントはあったものの、あとはボタンポチポチとチュートリアルのコードコピペでメールを送信することができました。

とっても簡単で便利なので、実務でも即実践投入できそうな気配があります。

本記事が少しでも助けになれば幸いです。