Azure Communication Services Emailを触ってみた話
はじめに
2022年5月25日時点の記事となります。
この時点でAzure Communication Services EmailはPreviewです。
記事中にでてくる画面キャプチャやコードは参照時期によっては変更されている可能性がありますのでご留意ください。
Azure Communication Services Email
Azure上でメール送信する仕組みは非推奨ということもあり
Azureでメールを取り扱いたいといった場合、Logic Appsを経由してOutlookで送るとか、外部サービスのSend Grid等を使用するかしかありませんでした。
Azure 上にメールサーバー/SMTP サーバーを構築する場合の注意事項 | Microsoft Docs
しかし、今回のBuildでAzure Communication Services Emailが発表されたことにより
外部サービスを使うことなく利用できることになりそうなので良きって感じですね!
早速見ていきたいと思います。
触ってみる
Communication Servicesを作成する
Communication Servicesを介してEmailが送信されるのでまずはCommunication Servicesの作成からです。
Data Locationは一応United Statesを選択。
Communication Services Emailを作成する
作成時の設定内容は特に難しいものはないので割愛
Domainの設定を行う
まずは雑にAzureのドメインを利用して作ってみます。
といってもClickしたら作られるだけなので特に設定作業ははさみません。簡単。
Communication ServicesとCommunication Services Emailを接続する
Communication Services側からEmailのDomainで先程作成したドメインと接続を行います。
接続もリソースを選択していくだけなので簡単ですね。
送信コードを組んでみる
今回はC#で組んでみようと思います。
NuGetのPrereleaseでAzure.Communication.Email
が提供されているのでそれを利用します。
接続文字列はCommunication Services側のKeysから取得します。
あとはこんな感じで送信。ほぼ公式のサンプル通りですがちょいちょい付け足しています、
using Azure.Communication.Email; using Azure.Communication.Email.Models; Console.WriteLine("Hello, World!"); var connectionString = @"Communication Servicesから取得した接続文字列"; var emailClient = new EmailClient(connectionString); // EmailContentの文字列引数はメールタイトル EmailContent emailContent = new EmailContent("Welcome to Azure Communication Services Email APIs."); // 内容(Htmlが設定されたらHTML側が優先される?) emailContent.PlainText = "This email meessage is sent from Azure Communication Services Email using .NET SDK."; emailContent.Html = "<h1>HTMLのあれやこれや</h1>"; // 送信するアドレスの設定 List<EmailAddress> emailAddresses = new List<EmailAddress> { new EmailAddress("<送信先メールアドレス>") }; // EmailRecipientsのインスタンスは(To, Cc, Bcc)引数のようだ EmailRecipients emailRecipients = new EmailRecipients(emailAddresses); EmailMessage emailMessage = new EmailMessage("<送信元メールアドレス>", emailContent, emailRecipients); SendEmailResult emailResult = emailClient.Send(emailMessage, CancellationToken.None); // 送信結果の確認 var status = emailClient.GetSendStatus(emailResult.MessageId); Console.WriteLine("おわり");
こんな感じで届きました。簡単ですね!
送信までは少し時間が掛かるようなので送信結果を抑えてから別の処理を行いたい場合は
emailClient.GetSendStatus(emailResult.MessageId)
でoutForDelivery
になるまで待ちましょう。
ステータスはこんな感じみたいです。
添付ファイルはBase64変換したファイルをEmailAttachment
に設定してEmailMessage
のAttachmensts
のListに追加すれば良さそうです。
// 添付ファイル string base64St = Convert.ToBase64String(File.ReadAllBytes(@"C:\temp\sample.txt")); EmailAttachment attachment = new EmailAttachment("さんぷる.txt", EmailAttachmentType.Txt, base64St); emailMessage.Attachments.Add(attachment);
上記のコードで👇のように届きます。
MS Docsより詳細なサンプルも例のごとくGitHubに転がっているので何はともあれ見てみるのがいいと思います
気になること
まだベストプラクティスは出ていないですが、他のAzure SDKのClient同様RESTベースの通信していそうです。
SDKのプラクティス:C#.NET Guidelines: Implementation | Azure SDKs
なのでWeb Appsなどで構成する場合はSingleton構成にするのがベターなのかなーと思ってたりはしています。
送信元の情報変更
メールアドレスなど送信者の情報のメタデータを変更できます。
作成したメールドメインの設定画面から変更できるようです。
MailFromはDoNoyReply
から好きなものに変更できます
ユーザーがメールを開いたかなどのトラッキングも行えるようです。
設定を行ったあとメール送信すると下図のようになります。
名前やアドレスはもちろん、トラッキング用と思しきタグが生えているのも確認できます。
データの確認なんかはまだログだとできないんですかね。
他のサービスよろしくACS???
みたいな感じで生えているかなーと少し期待していたのですが。ここもしばらく待っておけば出てくるかもしれません。
(EventLog追っかける元気はなかった…😫
価格
Public Preview段階ですが価格情報ももう出ています。
Email pricing - An Azure Communication Services concept document | Microsoft Docs
電子メール送信と転送されたデータで価格が決定するようです。
価格の例が出ているのでわかりやすいですね。
まとめ
Azure Communication Service Emailでメールの送信を行うことが確認できました。
色々とやりにくかった、Azureでのメール送信が楽になるかもしれませんね。
SendGridなどの外部サービスとくらべて何ができて何ができないかは気になるところではありますが、Azureの中で一つの選択肢ができたのはとてもわくわくすることだと思います。
Emailを使用するような機能を実装したい場合は積極的に検証していきたいですね(まだPreviewですが…
余談ですが、会社でSend Gridを使っているのですが、それと同じようなノリでSDKを使うことができました。
ロジックをうまく分離できていたらメール送信層だけすげ替えればあっさりと移行できるかもしれないのも良いなと思いました。