Поделиться через


Создание исключения при достижении ограничения уровня отправки электронной почты

В этой статье описывается, как создать исключение при достижении ограничения уровня отправки электронной почты с помощью наших пакетов SDK для электронной почты.

Создание исключения при достижении ограничения уровня отправки электронной почты

API электронной почты использует регулирование с ограничениями на количество сообщений электронной почты, которые можно отправлять. Ограничения отправки электронной почты применяются в минуту и в час, как описано в разделе "Регулирование API" и "Время ожидания". Когда вы достигнете этих ограничений, последующие попытки отправки электронной почты при использовании вызовов SendAsync приведут к ответу об ошибке 429: Too Many Requests. По умолчанию пакет SDK настраивается для повторения этих запросов после ожидания определенного периода времени. Чтобы записать эти коды ответов, рекомендуется настроить ведение журнала с помощью пакета SDK Для Azure.

Кроме того, можно вручную определить настраиваемую политику:

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 настраивается для повторения этих запросов после ожидания определенного периода времени. Чтобы записать эти коды ответов, рекомендуется настроить ведение журнала с помощью пакета SDK Для Azure.

Есть ограничения на количество сообщений электронной почты, которые можно отправлять в минуту и в час с помощью службы электронной почты Azure. При достижении этих ограничений beginSend все дальнейшие 429: Too Many Requests вызовы получают ответ. По умолчанию пакет SDK настраивается для повторения этих запросов после ожидания определенного периода времени. Мы рекомендуем настроить ведение журнала с помощью пакета SDK Azure для записи этих кодов ответов.

Кроме того, можно вручную определить настраиваемую политику:

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 настраивается для повторения этих запросов после ожидания определенного периода времени. Чтобы записать эти коды ответов, рекомендуется настроить ведение журнала с помощью пакета SDK Для Azure.

Кроме того, можно вручную определить настраиваемую политику:

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 настраивается для повторения этих запросов после ожидания определенного периода времени. Чтобы записать эти коды ответов, рекомендуется настроить ведение журнала с помощью пакета SDK Для Azure.

Кроме того, можно вручную определить настраиваемую политику, чтобы гарантировать, что 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

Если вы хотите отменить и удалить подписку на Службы коммуникации, можно удалить ресурс или группу ресурсов. При удалении группы ресурсов также удаляются все связанные с ней ресурсы. См. сведения об очистке ресурсов.

Дальнейшие действия