この記事では、電子メール SDK を使用して電子メールを送信するときに、電子メールの状態を手動でポーリングする方法について説明します。
Azure Communication Services の使用を開始するために、Communication Services .NET Email クライアント ライブラリを使用してメール メッセージを送信します。
この記事を完了すると、ご利用の Azure アカウントでわずかな (米国ドルで数セント未満の) コストが発生します。
ヒント
GitHub Azure サンプル の基本的な電子メール送信と高度な電子メール 送信を使用して、Azure Communication Services で 電子メール送信エクスペリエンスをすぐに開始できます。
電子メール オブジェクト モデルを理解する
C# 用 Azure Communication Services Email クライアント ライブラリが備える主な機能のいくつかは、以下のクラスとインターフェイスにより処理されます。
名前 | 説明 |
---|---|
メールアドレス | このクラスには、メール アドレスと表示名のオプションが含まれています。 |
メール添付ファイル | このクラスは、一意の ID、メール添付ファイルの MIME の種類の文字列、コンテンツのバイナリ データ、添付ファイルをインライン添付ファイルとして定義するオプションのコンテンツ ID を受け入れて、メールの添付ファイルを作成します。 |
メールクライアント | このクラスは、すべてのメール機能に必要となります。 接続文字列を使用してこれをインスタンス化し、それを使用して電子メール メッセージを送信します。 |
メールクライアントオプション | このクラスを EmailClient のインスタンス化に追加して、特定の API バージョンをターゲットにすることができます。 |
メールコンテンツ | このクラスには、電子メール メッセージの件名と本文が含まれています。 プレーンテキストまたは Html コンテンツの少なくとも 1 つを指定する必要があります |
メールカスタムヘッダー | このクラスにより、カスタム ヘッダーの名前と値のペアを追加できます。 メールの重要度は、ヘッダー名 'x-priority' または 'x-msmail-priority' を使用して、これらのヘッダーで指定することもできます |
メールメッセージ | このクラスは、送信者、コンテンツ、受信者を結合します。 カスタム ヘッダー、添付ファイル、および返信先のメール アドレスも必要に応じて追加できます。 |
メール受信者 | このクラスは、CC と BCC 受信者のオプション リストなど、メール メッセージの受信者に関する EmailAddress オブジェクトの一覧を保持します。 |
メール送信操作 | このクラスは、非同期の電子メール送信操作を表し、電子メール送信 API 呼び出しから返されます。 |
電子メール送信結果 | このクラスは、メール送信操作の結果を保持します。 これには、操作 ID、操作の状態、およびエラー オブジェクト (該当する場合) があります。 |
EmailSendResult は、実行されたメール操作について次の状態を返します。
状態 | 説明 |
---|---|
未開始 | 現時点では、この状態をサービスから送信していません。 |
ランニング | メール送信操作は現在進行中であり、処理中です。 |
成功しました | メール送信操作はエラーなしで完了し、メールは配信用に送信されます。 このステージを過ぎたメール配信に関する詳細な状態はすべて、Azure Monitor または Azure Event Grid を使用して取得できます。 メール イベントに登録する方法を確認してください |
失敗 | メール送信操作が成功せず、エラーが発生しました。 メールは送信されませんでした。 結果には、失敗の理由の詳細を記したエラー オブジェクトが含まれます。 |
前提条件
- アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
- お使いのオペレーティング システムに対応した最新バージョンの .NET Core クライアント ライブラリ。
- プロビジョニングされたドメインと共に準備が整った Azure Email Communication Services リソースを作成しました。電子メール通信リソース作成の開始方法
- メール ドメインに接続されているアクティブな Communication Services リソースと接続文字列。 電子メール リソースと通信リソースを接続して開始する
この記事を完了すると、ご利用の Azure アカウントでわずかな (米国ドルで数セント未満の) コストが発生します。
注
また、独自の検証済みドメインからメールを送信することもできます。 メール通信サービスにカスタム確認済みドメインを追加する。
前提条件のチェック
- ターミナルまたはコマンド ウィンドウで
dotnet
コマンドを実行して、.NET クライアント ライブラリがインストールされていることを確認します。 - Email Communication Services リソースに関連付けられているサブドメインを表示するには、Azure portal にサインインし、Email Communication Services リソースを見つけて、左側のナビゲーション ペインから [Provision domains] (ドメインのプロビジョニング) タブを開きます。
新しい C# アプリケーションを作成する
コンソール ウィンドウ (cmd、PowerShell、Bash など) で、dotnet new
コマンドを使用し、EmailQuickstart
という名前で新しいコンソール アプリを作成します。 このコマンドにより、1 つのソース ファイルを使用する単純な "Hello World" C# プロジェクトが作成されます。Program.cs。
dotnet new console -o EmailQuickstart
新しく作成したアプリ フォルダーにディレクトリを変更し、dotnet build
コマンドを使用してアプリケーションをコンパイルします。
cd EmailQuickstart
dotnet build
パッケージをインストールする
まだアプリケーション ディレクトリにいる間に、dotnet add package
コマンドを使用して、.NET 用の Azure Communication Services Email クライアント ライブラリ パッケージをインストールします。
dotnet add package Azure.Communication.Email
認証を使用したメール クライアントの作成
Program.csを開き、既存のコードを次のコードに置き換えて、using
名前空間とプログラムの実行の開始点を含めるAzure.Communication.Email
ディレクティブを追加します。
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Azure;
using Azure.Communication.Email;
namespace SendEmail
{
internal class Program
{
static async Task Main(string[] args)
{
}
}
}
電子メール クライアントの認証には、いくつかのオプションがあります。
テキスト エディターで Program.cs を開き、Main
メソッドの本文を、接続文字列を使用して EmailClient
を初期化するコードで置き換えます。 次のコードは、COMMUNICATION_SERVICES_CONNECTION_STRING
という名前の環境変数からリソースの接続文字列を取得します。
リソースの接続文字列を管理する方法について確認してください。
// This code demonstrates how to fetch your connection string
// from an environment variable.
string connectionString = Environment.GetEnvironmentVariable("COMMUNICATION_SERVICES_CONNECTION_STRING");
EmailClient emailClient = new EmailClient(connectionString);
メールを非同期で送信し、メール送信状況をポーリングする
Azure.WaitUntil.Started
を使用して SendAsync を呼び出すと、操作の開始後にメソッドが戻ります。 このメソッドはオブジェクト EmailSendOperation
返します。
UpdateStatusAsync
メソッドを呼び出して、電子メール操作の状態を更新できます。
返される EmailSendOperation
オブジェクトには、次を含む EmailSendStatus
オブジェクトが含まれています。
- メール送信操作の現在の状態。
- 現在の状態が失敗状態である場合は、失敗の詳細を含むエラー オブジェクト。
//Replace with your ___domain and modify the content, recipient details as required
var subject = "Welcome to Azure Communication Service Email APIs.";
var htmlContent = "<html><body><h1>Quick send email test</h1><br/><h4>This email message is sent from Azure Communication Service Email.</h4><p>This mail was sent using .NET SDK!!</p></body></html>";
var sender = "donotreply@xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.azurecomm.net";
var recipient = "emailalias@contoso.com";
/// Send the email message with WaitUntil.Started
EmailSendOperation emailSendOperation = await emailClient.SendAsync(
Azure.WaitUntil.Started,
sender,
recipient,
subject,
htmlContent);
/// Call UpdateStatus on the email send operation to poll for the status
/// manually.
try
{
while (true)
{
await emailSendOperation.UpdateStatusAsync();
if (emailSendOperation.HasCompleted)
{
break;
}
await Task.Delay(100);
}
if (emailSendOperation.HasValue)
{
Console.WriteLine($"Email queued for delivery. Status = {emailSendOperation.Value.Status}");
}
}
catch (RequestFailedException ex)
{
Console.WriteLine($"Email send failed with Code = {ex.ErrorCode} and Message = {ex.Message}");
}
/// Get the OperationId so that it can be used for tracking the message for troubleshooting
string operationId = emailSendOperation.Id;
Console.WriteLine($"Email operation id = {operationId}");
アプリケーション ディレクトリから dotnet run
コマンドを使用してアプリケーションを実行します。
dotnet run
サンプル コード
サンプル アプリは、GitHub Azure Samples Email Sample Advanced からダウンロードできます。
トラブルシューティング
電子メール配信
電子メール配信に関連する問題をトラブルシューティングするために、電子メール配信の状態を取得して配信の詳細を取得できます。
重要
送信操作の状態をポーリングして返された成功の結果は、電子メールが配信用に送信されていることを検証するだけです。 受信者側での配信の状態の詳細については、 電子メール イベントを処理する方法を参照してください。
メールの調整
アプリケーションがハングしている場合は、電子メール送信が制限されていることが原因である可能性があります。 ログの記録またはカスタムポリシーの実装によって、メールの調整を処理できます。
注
このサンドボックスは、開発者がアプリケーションのビルドを開始するのに役立ちます。 アプリケーションを公開する準備ができたら、次第に送信量を増やすことを要求できるようになります。 レート制限を超える量のメッセージを送信する必要がある場合は、必要な送信制限を引き上げるように求めるサポート リクエストを送信してください。
Azure Communication Services のリソースをクリーンアップする
Communication Services サブスクリプションをクリーンアップして解除する場合は、リソースまたはリソース グループを削除できます。 リソース グループを削除すると、それに関連付けられている他のリソースも削除されます。 詳細については、リソースのクリーンアップに関する記事を参照してください。
次の手順
- 複数の受信者にメールを送信する方法を確認する
- 添付ファイル付きのメールを送信する方法の詳細を確認する
- 電子メール クライアント ライブラリについて理解する