Guida introduttiva: Generare un'eccezione quando viene raggiunto il limite del livello di invio della posta elettronica

In questa guida introduttiva si apprenderà come generare un'eccezione quando viene raggiunto il limite del livello di invio di posta elettronica usando gli SDK di Email.

Generare un'eccezione quando viene raggiunto il limite del livello di invio di posta elettronica

L'API Email presenta limitazioni per il numero di messaggi di posta elettronica che è possibile inviare. Email l'invio ha limiti applicati al minuto e all'ora, come indicato in Limitazioni API e timeout. Quando sono stati raggiunti questi limiti, i messaggi di posta elettronica successivi inviati con SendAsync chiamate ricevono una risposta di errore "429: Troppe richieste". Per impostazione predefinita, l'SDK è configurato per ritentare queste richieste dopo un determinato periodo di tempo. È consigliabile configurare la registrazione con Azure SDK per acquisire questi codici di risposta.

In alternativa, è possibile definire manualmente un criterio personalizzato:

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

Aggiungere questo criterio al client di posta elettronica per assicurarsi che i codici di risposta 429 generino un'eccezione anziché essere ritentati.

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

EmailClient emailClient = new EmailClient(connectionString, emailClientOptions);

Generare un'eccezione quando viene raggiunto il limite del livello di invio di posta elettronica

L'API Email presenta limitazioni per il numero di messaggi di posta elettronica che è possibile inviare. Email l'invio ha limiti applicati al minuto e all'ora, come indicato in Limitazioni API e timeout. Quando sono stati raggiunti questi limiti, i messaggi di posta elettronica successivi inviati con send chiamate ricevono una risposta di errore "429: Troppe richieste". Per impostazione predefinita, l'SDK è configurato per ritentare queste richieste dopo un determinato periodo di tempo. È consigliabile configurare la registrazione con Azure SDK per acquisire questi codici di risposta.

Esistono limiti al minuto e all'ora per la quantità di messaggi di posta elettronica che è possibile inviare usando il servizio Di comunicazione di Azure Email. Quando si raggiungono questi limiti, tutte le altre beginSend chiamate ricevono una 429: Too Many Requests risposta. Per impostazione predefinita, l'SDK è configurato per ritentare queste richieste dopo un determinato periodo di tempo. È consigliabile configurare la registrazione con Azure SDK per acquisire questi codici di risposta.

In alternativa, è possibile definire manualmente un criterio personalizzato:

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

Aggiungere questo criterio al client di posta elettronica per assicurarsi che i codici di risposta 429 generino un'eccezione anziché essere ritentati.

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

const emailClient = new EmailClient(connectionString, clientOptions);

Generare un'eccezione quando viene raggiunto il limite del livello di invio di posta elettronica

L'API Email presenta limitazioni per il numero di messaggi di posta elettronica che è possibile inviare. Email l'invio ha limiti applicati al minuto e all'ora, come indicato in Limitazioni API e timeout. Quando sono stati raggiunti questi limiti, i messaggi di posta elettronica successivi inviati con beginSend chiamate ricevono una risposta di errore "429: Troppe richieste". Per impostazione predefinita, l'SDK è configurato per ritentare queste richieste dopo un determinato periodo di tempo. È consigliabile configurare la registrazione con Azure SDK per acquisire questi codici di risposta.

In alternativa, è possibile definire manualmente un criterio personalizzato:

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

Aggiungere questo criterio di ripetizione dei tentativi al client di posta elettronica per assicurarsi che i codici di risposta 429 generino un'eccezione anziché essere ritentati.

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

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

Generare un'eccezione quando viene raggiunto il limite del livello di invio di posta elettronica

L'API Email presenta limitazioni per il numero di messaggi di posta elettronica che è possibile inviare. Email l'invio ha limiti applicati al minuto e all'ora, come indicato in Limitazioni API e timeout. Quando sono stati raggiunti questi limiti, i messaggi di posta elettronica successivi inviati con SendAsync chiamate ricevono una risposta di errore "429: Troppe richieste". Per impostazione predefinita, l'SDK è configurato per ritentare queste richieste dopo un determinato periodo di tempo. È consigliabile configurare la registrazione con Azure SDK per acquisire questi codici di risposta.

In alternativa, è possibile definire manualmente un criterio personalizzato per garantire che 429 codici di risposta generino un'eccezione anziché essere ritentati.

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)

Risoluzione dei problemi

Recapito Email

Per risolvere i problemi relativi al recapito tramite posta elettronica, è possibile ottenere lo stato del recapito tramite posta elettronica per acquisire i dettagli di recapito.

Importante

Il risultato dell'esito positivo restituito dal polling per lo stato dell'operazione di invio convalida solo il fatto che il messaggio di posta elettronica sia stato inviato correttamente per il recapito. Per ottenere informazioni aggiuntive sullo stato del recapito alla fine del destinatario, è necessario fare riferimento a come gestire gli eventi di posta elettronica.

Limitazione Email

Se si noterà che l'applicazione è in sospeso, potrebbe essere dovuta all'invio di messaggi di posta elettronica limitati. È possibile gestirlo tramite la registrazione o implementando un criterio personalizzato.

Nota

Questa configurazione sandbox consente agli sviluppatori di iniziare a creare l'applicazione. È possibile richiedere gradualmente di aumentare il volume di invio dopo che l'applicazione è pronta per essere attiva. Inviare una richiesta di supporto per aumentare il limite di invio desiderato se è necessario inviare un volume di messaggi che superano i limiti di frequenza.

Pulire le risorse del servizio di comunicazione di Azure

Per pulire e rimuovere una sottoscrizione di Servizi di comunicazione, è possibile eliminare la risorsa o il gruppo di risorse. Eliminando il gruppo di risorse vengono eliminate anche tutte le altre risorse associate. Vedere altre informazioni sulla pulizia delle risorse.

Passaggi successivi

In questa guida introduttiva si è appreso come eseguire manualmente il polling dello stato durante l'invio di messaggi di posta elettronica usando Servizi di comunicazione di Azure.

Può essere utile vedere anche gli articoli seguenti: