次の方法で共有


メール送信層の制限に達したときに例外をスローする

この記事では、メール SDK を使用して、メール送信層の制限に達したときに例外をスローする方法について説明します。

メール送信層の制限に達したときに例外をスローする

Email API では、送信できる電子メールメッセージ数に制限を加えるスロットリングが使用されています。 メール送信の制限は、 API の調整とタイムアウトに関する説明に従って、1 分ごと、1 時間あたりに適用されます。 これらの制限に達すると、 SendAsync 呼び出しを伴う後続の電子メール送信は、 429: Too Many Requestsのエラー応答を受け取ります。 既定では、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 時間あたりに適用されます。 これらの制限に達すると、 SendAsync 呼び出しを伴う後続の電子メール送信は、 429: Too Many Requestsのエラー応答を受け取ります。 既定では、SDK は、一定期間待機した後にこれらの要求を再試行するように構成されています。 これらの応答コードをキャプチャするには、 Azure SDK でログ記録を設定することをお勧めします。

Azure Communication Email Service を使用して送信できる電子メールの量には、分単位と時間単位の制限があります。 これらの制限に達すると、それ以上 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 時間あたりに適用されます。 これらの制限に達すると、 SendAsync 呼び出しを伴う後続の電子メール送信は、 429: Too Many Requestsのエラー応答を受け取ります。 既定では、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: Too Many Requestsのエラー応答を受け取ります。 既定では、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 サブスクリプションをクリーンアップして解除する場合は、リソースまたはリソース グループを削除できます。 リソース グループを削除すると、それに関連付けられている他のリソースも削除されます。 詳細については、リソースのクリーンアップに関する記事を参照してください。

次のステップ