你当前正在访问 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 通信服务发送电子邮件时手动轮询状态。
你可能还想要:
- 了解如何向多名收件人发送电子邮件
- 详细了解如何发送包含附件的电子邮件
- 熟悉电子邮件客户端库