toutes les fiches

// comment corriger

Amazon SES « Throttling: Maximum sending rate exceeded » (454) : la solution

Amazon SES renvoie « Maximum sending rate exceeded » ou « Daily message quota exceeded ». Vérifiez vos quotas, ralentissez l'envoi et demandez une hausse.

Ce que ça veut dire

Chaque compte Amazon SES dispose de deux quotas d'envoi par Région AWS : un débit d'envoi (emails par seconde) et un quota d'envoi (emails sur 24 heures glissantes). Quand vous dépassez l'un d'eux, SES refuse le message. En SMTP, les réponses sont :

454 Throttling failure: Maximum sending rate exceeded
454 Throttling failure: Daily message quota exceeded

Via l'API ou un SDK, vous obtenez une erreur Throttling avec le message « Maximum sending rate exceeded » ou « Daily message quota exceeded ». Un code 4xx est temporaire : le message n'a pas été envoyé, mais il pourra l'être plus tard. Un message refusé n'est pas facturé.

Pourquoi cela arrive

  • Toujours dans la sandbox. Les comptes en sandbox sont limités par défaut à 1 message par seconde et 200 messages par 24 heures. Voir comment sortir de la sandbox.
  • Pics d'envoi. Votre application envoie toute une liste en boucle avec de nombreux workers en parallèle. SES tolère de courts pics, pas un dépassement prolongé.
  • Les quotas comptent les destinataires, pas les messages. Un email avec 10 destinataires compte pour 10.
  • Mauvaise Région. Les quotas sont propres à chaque Région. Un quota relevé dans us-east-1 ne s'applique pas à eu-west-1.
  • Anciens identifiants SMTP. « Maximum SigV2 SMTP sending rate exceeded » signifie que vos identifiants SMTP ont été créés avant le 10 janvier 2019. Remplacez-les par de nouveaux.
  • Si le texte de la limitation ne correspond à aucun des deux quotas, AWS conseille de consulter l'AWS Health Dashboard pour vérifier un éventuel incident.

Comment vérifier

Consultez vos quotas actuels et votre consommation avec la CLI (ou dans l'Account dashboard de la console) :

aws sesv2 get-account --region eu-west-1

"SendQuota": {
    "Max24HourSend": 50000.0,
    "MaxSendRate": 14.0,
    "SentLast24Hours": 48211.0
}

Comparez MaxSendRate au nombre de messages que votre code envoie réellement par seconde, et SentLast24Hours à Max24HourSend. Vos logs indiquent l'heure des erreurs 454 : des pics au début d'une campagne trahissent un problème de débit ; des erreurs en fin de journée, le quota journalier.

Comment corriger

Ralentir et réessayer

Envoyez au maximum à votre MaxSendRate, et réessayez les erreurs 454 avec des attentes croissantes (AWS suggère par exemple 5 s, 10 s, 30 s, puis une pause plus longue). Les SDK AWS réessaient automatiquement les appels API, mais votre propre file d'attente doit quand même respecter le débit. Avec nodemailer, un transport en pool peut limiter le débit :

const transporter = nodemailer.createTransport({
  host: 'email-smtp.eu-west-1.amazonaws.com', port: 587,
  auth: { user: process.env.SES_SMTP_USER, pass: process.env.SES_SMTP_PASS },
  pool: true,
  maxConnections: 2,
  rateDelta: 1000,  // per second
  rateLimit: 10,    // at most 10 messages per rateDelta
});

Avec Postfix en relais vers SES, réduisez les livraisons parallèles vers le relais, par exemple smtp_destination_concurrency_limit = 2 et smtp_destination_rate_delay = 1s dans main.cf (le délai s'applique par destination, ici le relais SES). Postfix garde les messages en 4xx dans sa file et les réessaie automatiquement.

Quota journalier atteint

Patientez : le quota porte sur une fenêtre glissante de 24 heures, la capacité revient donc au fur et à mesure que les envois les plus anciens en sortent. Étalez les grosses campagnes sur plusieurs jours, et envoyez un destinataire par appel API plutôt que de longues listes de destinataires.

Demander des quotas plus élevés

Ouvrez la console Service Quotas, sélectionnez la bonne Région, choisissez AWS services, puis Amazon Simple Email Service (SES), et demandez une hausse du Sending quota ou du Sending rate. AWS indique traiter ces demandes en 24 heures environ, et peut aussi relever les quotas automatiquement quand vous envoyez des emails de bonne qualité proches de votre limite, avec de faibles taux de rebond et de plaintes.

Même avec des quotas élevés, ne passez pas brutalement de quelques centaines à des dizaines de milliers d'emails par jour : les fournisseurs de messagerie réagissent aux pics soudains par leurs propres limitations (voir SMTP 421 trop de connexions). Montez en charge progressivement, comme expliqué dans chauffer un nouveau domaine ou une nouvelle IP.

Vérifier que c'est corrigé

Relancez votre tâche d'envoi et surveillez vos logs : il ne doit plus y avoir d'erreurs 454, et SentLast24Hours doit rester sous Max24HourSend. Envoyez un message à votre adresse unique de la page d'accueil de Delivmail pour confirmer que le contenu et l'authentification sont toujours propres après vos changements, puis renvoyez les messages qui avaient été refusés.

Vérifiez que c'est corrigé

Une modification DNS peut prendre de quelques minutes à quelques heures. Ensuite, envoyez un nouvel email de test ou scannez à nouveau votre domaine.

Fiches liées