你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

达到电子邮件发送层限制时引发异常

本文介绍如何使用电子邮件 SDK 达到电子邮件发送层限制时引发异常。

达到电子邮件发送级别限制时抛出异常

电子邮件 API 使用节流技术,对可以发送的电子邮件数量进行限制。 电子邮件发送限制按分钟和小时应用,如 API 限制和超时中所述。 如果达到这些限制,后续通过 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);

达到电子邮件发送层限制时引发异常

电子邮件 API 使用调节机制限制可以发送的电子邮件数量。 电子邮件发送限制按分钟和小时应用,如 API 限制和超时中所述。 如果达到这些限制,后续通过 SendAsync 调用发送电子邮件时,会收到错误响应 429: Too Many Requests。 默认情况下,SDK 配置为在等待某个时间段后重试这些请求。 若要捕获这些响应代码,建议 使用 Azure SDK 设置日志记录

使用 Azure 通信电子邮件服务发送的电子邮件数量有每分钟和每小时的限制。 达到这些限制时,任何进一步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);

达到电子邮件发送层限制时引发异常

电子邮件 API 使用节流技术,对您可以发送的电子邮件数量进行限制。 电子邮件发送限制按分钟和小时应用,如 API 限制和超时中所述。 当达到这些限制时,使用 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();

达到电子邮件发送层限制时引发异常

电子邮件 API 使用节流机制,限制可以发送的电子邮件数量。 电子邮件发送限制按分钟和小时应用,如 API 限制和超时中所述。 达到这些限制时,后续的电子邮件发送中使用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 通信服务资源

如果想要清理并删除通信服务订阅,可以删除资源或资源组。 删除资源组同时也会删除与之相关联的任何其他资源。 了解有关清理资源的详细信息。

后续步骤