クイックスタート: メール送信層の制限に達したときに例外をスローする
このクイック スタートでは、、メール SDK を使用して、メール送信層の制限に達したときに例外をスローする方法について説明します。
メール送信層の制限に達したときに例外をスローする
Email API には調整があり、送信できる電子メール メッセージの数に制限があります。 メールの送信には、API の調整とタイムアウトに関するページで説明されているように、1 分あたりと 1 時間あたりの制限が適用されます。 これらの制限に達すると、SendAsync
呼び出しを使用した以降のメール送信では、"429: 要求が多すぎます" というエラー応答が返されます。 既定では、SDK は、一定期間待機した後にこれらの要求を再試行するように構成されています。 これらの応答コードをキャプチャするために、Azure SDK でログ記録を設定することをお勧めします。
または、以下のようにカスタム ポリシーを手動で定義することもできます。
using Azure.Core.Pipeline;
public class Catch429Policy : HttpPipelineSynchronousPolicy
{
public override void OnReceivedResponse(HttpMessage message)
{
if (message.Response.Status == 429)
{
throw new Exception(message.Response);
}
else
{
base.OnReceivedResponse(message);
}
}
}
このポリシーをメール クライアントに追加して、429 の応答コードで再試行されるのではなく例外がスローされるようにします。
EmailClientOptions emailClientOptions = new EmailClientOptions();
emailClientOptions.AddPolicy(new Catch429Policy(), HttpPipelinePosition.PerRetry);
EmailClient emailClient = new EmailClient(connectionString, emailClientOptions);
メール送信層の制限に達したときに例外をスローする
Email API には調整があり、送信できる電子メール メッセージの数に制限があります。 メールの送信には、API の調整とタイムアウトに関するページで説明されているように、1 分あたりと 1 時間あたりの制限が適用されます。 これらの制限に達すると、send
呼び出しを使用した以降のメール送信では、"429: 要求が多すぎます" というエラー応答が返されます。 既定では、SDK は、一定期間待機した後にこれらの要求を再試行するように構成されています。 これらの応答コードをキャプチャするために、Azure SDK でログ記録を設定することをお勧めします。
Azure Communication Email Service を使用して送信できるメールの量には、1 分あたりと 1 時間あたりの制限があります。 これらの制限に達すると、それ以降の beginSend
呼び出しでは 429: Too Many Requests
応答が返されます。 既定では、SDK は、一定期間待機した後にこれらの要求を再試行するように構成されています。 これらの応答コードをキャプチャするために、Azure SDK でログ記録を設定することをお勧めします。
または、以下のようにカスタム ポリシーを手動で定義することもできます。
const catch429Policy = {
name: "catch429Policy",
async sendRequest(request, next) {
const response = await next(request);
if (response.status === 429) {
throw new Error(response);
}
return response;
}
};
このポリシーをメール クライアントに追加して、429 の応答コードで再試行されるのではなく例外がスローされるようにします。
const clientOptions = {
additionalPolicies: [
{
policy: catch429Policy,
position: "perRetry"
}
]
}
const emailClient = new EmailClient(connectionString, clientOptions);
メール送信層の制限に達したときに例外をスローする
Email API には調整があり、送信できる電子メール メッセージの数に制限があります。 メールの送信には、API の調整とタイムアウトに関するページで説明されているように、1 分あたりと 1 時間あたりの制限が適用されます。 これらの制限に達すると、beginSend
呼び出しを使用した以降のメール送信では、"429: 要求が多すぎます" というエラー応答が返されます。 既定では、SDK は、一定期間待機した後にこれらの要求を再試行するように構成されています。 これらの応答コードをキャプチャするために、Azure SDK でログ記録を設定することをお勧めします。
または、以下のようにカスタム ポリシーを手動で定義することもできます。
import com.azure.core.http.HttpResponse;
import com.azure.core.http.policy.ExponentialBackoff;
public class CustomStrategy extends ExponentialBackoff {
@Override
public boolean shouldRetry(HttpResponse httpResponse) {
int code = httpResponse.getStatusCode();
if (code == HTTP_STATUS_TOO_MANY_REQUESTS) {
throw new RuntimeException(httpResponse);
}
else {
return super.shouldRetry(httpResponse);
}
}
}
この再試行ポリシーをメール クライアントに追加して、429 の応答コードで再試行されるのではなく例外がスローされるようにします。
import com.azure.core.http.policy.RetryPolicy;
EmailClient emailClient = new EmailClientBuilder()
.connectionString(connectionString)
.retryPolicy(new RetryPolicy(new CustomStrategy()))
.buildClient();
メール送信層の制限に達したときに例外をスローする
Email API には調整があり、送信できる電子メール メッセージの数に制限があります。 メールの送信には、API の調整とタイムアウトに関するページで説明されているように、1 分あたりと 1 時間あたりの制限が適用されます。 これらの制限に達すると、SendAsync
呼び出しを使用した以降のメール送信では、"429: 要求が多すぎます" というエラー応答が返されます。 既定では、SDK は、一定期間待機した後にこれらの要求を再試行するように構成されています。 これらの応答コードをキャプチャするために、Azure SDK でログ記録を設定することをお勧めします。
または、カスタム ポリシーを手動で定義して、429 の応答コードで再試行されるのではなく例外がスローされるようにすることもできます。
def callback(response):
if response.http_response.status_code == 429:
raise Exception(response.http_response)
email_client = EmailClient.from_connection_string(<connection_string>, raw_response_hook=callback)
トラブルシューティング
メール配信
メール配信に関連する問題をトラブルシューティングするには、メール配信の状態を取得して配信の詳細をキャプチャします。
重要
送信操作の状態のポーリングによって返される成功の結果は、メールが正常に配信されたという事実のみを示すものです。 受信者側の配信状態に関する追加情報を取得するには、メール イベントの処理方法に関する記事を参照してください。
メールの調整
アプリケーションがハングしている場合は、メール送信が調整されていることが原因である可能性があります。 これを処理するには、ログ記録を使用するか、カスタム ポリシーを実装します。
注意
このサンドボックスの設定は、開発者によるアプリケーションのビルド開始を支援するためのものです。 アプリケーションを公開する準備ができたら、次第に送信量を増やすことを要求できるようになります。 レート制限を超える量のメッセージを送信する必要がある場合は、必要な送信制限を引き上げるように求めるサポート リクエストを送信してください。
Azure Communication Services のリソースをクリーンアップする
Communication Services サブスクリプションをクリーンアップして解除する場合は、リソースまたはリソース グループを削除できます。 リソース グループを削除すると、それに関連付けられている他のリソースも削除されます。 詳細については、リソースのクリーンアップに関する記事を参照してください。
次の手順
このクイック スタートでは、Azure Communication Services を使用して、メールの送信時に状態を手動でポーリングする方法について説明しました。
次のことも実行できます。
- 複数の受信者にメールを送信する方法を確認する
- 添付ファイル付きのメールを送信する方法の詳細を確認する
- 電子メール クライアント ライブラリについて理解する