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

快速入门:达到电子邮件发送层限制时引发异常

在本快速入门中,你将了解如何使用电子邮件 SDK 在达到电子邮件发送层限制时引发异常。

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

Email API 存在限制,限制你可以发送的电子邮件数。 电子邮件发送具有按分钟和小时应用的限制,如 API 限制和超时中所述。 达到这些限制后,通过调用 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 限制和超时中所述。 达到这些限制后,通过调用 send 进行的后续电子邮件发送操作将收到错误响应“429: 请求过多”。 默认情况下,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);

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

Email API 存在限制,限制你可以发送的电子邮件数。 电子邮件发送具有按分钟和小时应用的限制,如 API 限制和超时中所述。 达到这些限制后,通过调用 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 限制和超时中所述。 达到这些限制后,通过调用 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 通信服务资源

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

后续步骤

在本快速入门中,你学习了如何在使用 Azure 通信服务发送电子邮件时手动轮询状态。

你可能还想要: