Compartir a través de


Lanzar una excepción cuando se alcanza el límite del nivel de envío de correos

En este artículo se describe cómo iniciar una excepción cuando se alcanza el límite del nivel de envío de correo electrónico mediante nuestros SDK de correo electrónico.

Lanzar una excepción cuando se alcanza el límite del nivel de envío de correos

La API de Email usa limitaciones con respecto al número de mensajes de correo electrónico que puede enviar. Los límites de envío de correo electrónico se aplican por minuto y por hora, tal y como se describe en Limitación de API y tiempos de espera. Cuando alcanza estos límites, los envíos de correo electrónico adicionales con llamadas SendAsync recibirán una respuesta de error 429: Too Many Requests. De forma predeterminada, el SDK está configurado para reintentar estas solicitudes después de esperar un período de tiempo determinado. Para capturar estos códigos de respuesta, se recomienda configurar el registro con el SDK de Azure.

Como alternativa, puede definir manualmente una directiva personalizada:

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);
        }
    }
}

Agregue esta directiva al cliente de correo electrónico para asegurarse de que los códigos de respuesta 429 inician una excepción en lugar de reintentarse.

EmailClientOptions emailClientOptions = new EmailClientOptions();
emailClientOptions.AddPolicy(new Catch429Policy(), HttpPipelinePosition.PerRetry);

EmailClient emailClient = new EmailClient(connectionString, emailClientOptions);

Lanzar una excepción cuando se alcanza el límite del nivel de envío de correos

La API de Email usa limitaciones con respecto al número de mensajes de correo electrónico que puede enviar. Los límites de envío de correo electrónico se aplican por minuto y por hora, tal y como se describe en Limitación de API y tiempos de espera. Cuando alcanza estos límites, los envíos de correo electrónico adicionales con llamadas SendAsync recibirán una respuesta de error 429: Too Many Requests. De forma predeterminada, el SDK está configurado para reintentar estas solicitudes después de esperar un período de tiempo determinado. Para capturar estos códigos de respuesta, se recomienda configurar el registro con el SDK de Azure.

Hay límites por minuto y por hora para la cantidad de correos electrónicos que puede enviar mediante Azure Communication Email Service. Cuando alcances estos límites, cualquier llamada beginSend adicional recibirá una respuesta 429: Too Many Requests. De forma predeterminada, el SDK está configurado para reintentar estas solicitudes después de esperar un período de tiempo determinado. Se recomienda configurar el registro con el SDK de Azure para capturar estos códigos de respuesta.

Como alternativa, puede definir manualmente una directiva personalizada:

const catch429Policy = {
  name: "catch429Policy",
  async sendRequest(request, next) {
    const response = await next(request);
    if (response.status === 429) {
      throw new Error(response);
    }
    return response;
  }
};

Agregue esta directiva al cliente de correo electrónico para asegurarse de que los códigos de respuesta 429 inician una excepción en lugar de reintentarse.

const clientOptions = {
  additionalPolicies: [
    {
      policy: catch429Policy,
      position: "perRetry"
    }
  ]
}

const emailClient = new EmailClient(connectionString, clientOptions);

Lanzar una excepción cuando se alcanza el límite del nivel de envío de correos

La API de Email usa limitaciones con respecto al número de mensajes de correo electrónico que puede enviar. Los límites de envío de correo electrónico se aplican por minuto y por hora, tal y como se describe en Limitación de API y tiempos de espera. Cuando alcanza estos límites, los envíos de correo electrónico adicionales con llamadas SendAsync recibirán una respuesta de error 429: Too Many Requests. De forma predeterminada, el SDK está configurado para reintentar estas solicitudes después de esperar un período de tiempo determinado. Para capturar estos códigos de respuesta, se recomienda configurar el registro con el SDK de Azure.

Como alternativa, puede definir manualmente una directiva personalizada:

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);
        }
    }
}

Agregue esta directiva de reintento al cliente de correo electrónico para asegurarse de que los códigos de respuesta 429 inician una excepción en lugar de reintentarse.

import com.azure.core.http.policy.RetryPolicy;

EmailClient emailClient = new EmailClientBuilder()
    .connectionString(connectionString)
    .retryPolicy(new RetryPolicy(new CustomStrategy()))
    .buildClient();

Lanzar una excepción cuando se alcanza el límite del nivel de envío de correos

La API de Email usa limitaciones con respecto al número de mensajes de correo electrónico que puede enviar. Los límites de envío de correo electrónico se aplican por minuto y por hora, tal y como se describe en Limitación de API y tiempos de espera. Cuando alcanza estos límites, los envíos de correo electrónico adicionales con llamadas SendAsync recibirán una respuesta de error 429: Too Many Requests. De forma predeterminada, el SDK está configurado para reintentar estas solicitudes después de esperar un período de tiempo determinado. Para capturar estos códigos de respuesta, se recomienda configurar el registro con el SDK de Azure.

Como alternativa, puede definir manualmente una directiva personalizada para asegurarse de que los códigos de respuesta 429 generen una excepción en lugar de que vuelvan a intentarse.

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)

Solución de problemas

Entrega de correo electrónico

Para solucionar incidencias relacionadas con la entrega de correo electrónico, puede obtener el estado de la entrega de correo electrónico para capturar los detalles de la entrega.

Importante

El resultado de éxito obtenido al sondear el estado de la operación de envío solo valida que el correo electrónico ha sido enviado para su entrega. Para obtener más información sobre el estado de la entrega en el lado del destinatario, consulte cómo gestionar eventos de correo electrónico.

Limitación de correo electrónico

Si la aplicación está bloqueada, podría deberse a que se está limitando el envío de correo electrónico. Puede controlar la limitación de correo electrónico mediante el registro o la implementación de una directiva personalizada.

Nota:

Este entorno de pruebas está diseñado para ayudar a los desarrolladores a empezar a construir la aplicación. Puede solicitar gradualmente aumentar el volumen de envío una vez que la aplicación esté lista para publicarse. Envíe una solicitud de soporte técnico para aumentar el límite de envío deseado si necesita enviar un volumen de mensajes que supere los límites de frecuencia.

Limpieza de recursos de Azure Communication Service

Si quiere limpiar y quitar una suscripción a Communication Services, puede eliminar el recurso o grupo de recursos. Al eliminar el grupo de recursos, también se elimina cualquier otro recurso que esté asociado a él. Obtenga más información sobre la limpieza de recursos.

Pasos siguientes