Throttling y rate limits en email: configuración por receptor y MTAs
Cómo gestionan throttling Gmail, Microsoft, Yahoo y otros, qué códigos SMTP indican rate limit, configurar concurrencia y ritmo en MTAs y ESPs.
Los grandes receptores aplican límites de velocidad para protegerse de envíos masivos repentinos. Si tu MTA o ESP envía más rápido de lo que el receptor acepta, recibes códigos 421 con “try again later” o “rate limit exceeded”. Mal gestionado, esto se traduce en colas crecientes, bounces falsos y deferidos. Bien gestionado, simplemente espera y reintenta. Saber qué pide cada receptor y cómo configurar concurrencia es la diferencia.
Por qué los receptores aplican throttling
Tres motivos principales:
- Protección de infraestructura: cualquier MX puede saturarse. Limitar conexiones por IP es defensa básica.
- Detección de spam: un volumen anormalmente alto desde una IP nueva o con poca reputación es señal sospechosa. Throttling permite analizar antes de aceptar.
- Reputación gradual: forzar a remitentes nuevos a subir volumen despacio facilita evaluación. Es parte del warming implícito.
Throttling no es bloqueo: el receptor no te rechaza definitivamente. Pide que esperes y reintentes. Tu MTA debe respetarlo.
Códigos SMTP típicos
Throttling temporal
421 4.7.0 Try again later
421 4.7.28 Our system has detected an unusual rate of unsolicited mail
421 4.4.5 Rate limit exceeded for [IP]
421 4.7.0 [IP 19] Our system has detected that this message is suspicious
4xx = transient. Tu MTA debe encolar y reintentar.
Throttling con mensaje específico
Gmail ejemplo:
421-4.7.0 [IP 15] Our system has detected an unusual rate of
421-4.7.0 unsolicited mail originating from your IP address. To protect our
421 4.7.0 users from spam, mail sent from your IP address has been temporarily
421 4.7.0 rate limited.
Yahoo:
421 4.7.0 [TSS04] Messages from x.x.x.x temporarily deferred due to user complaints
Microsoft (S3140 family):
421 4.7.500 Server busy. Please try again later
Bloqueo definitivo (no throttling)
554 5.7.1 Your message was rejected
550 5.7.26 Authentication required
5xx = permanent. No es throttling; es rechazo. No reintentar.
Throttling por receptor
Gmail
- Límite por IP variable según reputación. Reputación High permite mayor volumen sostenido.
- Conexiones concurrentes: típicamente hasta 10-20 desde una IP simultáneamente.
- Cuando supera, devuelve 421 con backoff sugerido implícito.
- Para IPs nuevas, el throttle es agresivo durante warming.
Microsoft (Outlook, Office 365)
- Documentación menos pública.
- Límites combinados: por IP, por dominio, por SmartScreen score.
- Códigos S3140-S3150 indican rate limit por reputación.
- Concurrencia recomendada: 5-10 por IP.
Yahoo / AOL
- Throttle típicamente más sensible a complaints.
- Si superas 0,3 % de queja, throttle más agresivo.
- 421 4.7.0 con texto explicativo.
Apple iCloud
- Documentación mínima. Throttle moderado.
- Tolera concurrencia normal pero penaliza fuerte autenticación rota.
Proveedores corporativos pequeños
- Muchos usan Postfix/Exim con
smtpd_client_connection_rate_limit. - Defaults: 10-30 conexiones/min por IP.
- Si los superas, 421 hasta que pase la ventana.
Configurar el ritmo desde tu MTA
Postfix
Variables clave:
# /etc/postfix/main.cf
# Concurrencia general saliente
default_destination_concurrency_limit = 20
# Por destino (puedes especificar receptor)
gmail_destination_concurrency_limit = 10
yahoo_destination_concurrency_limit = 5
# Tasa de envío por destino
default_destination_rate_delay = 0s
# Reintentos con backoff
minimal_backoff_time = 300s
maximal_backoff_time = 4000s
Para personalizar por receptor, usa transport:
# /etc/postfix/transport
gmail.com smtp_gmail:
yahoo.com smtp_yahoo:
Y servicios separados en master.cf:
smtp_gmail unix - - n - 10 smtp
-o smtp_destination_concurrency_limit=10
smtp_yahoo unix - - n - 5 smtp
-o smtp_destination_concurrency_limit=5
Exim
# Routers y transports
remote_smtp:
driver = smtp
connection_max_messages = 100
hosts_max_try = 3
# Rate limiting
ratelimit:
acl_smtp_data = ratelimit
MTAs especializados (PowerMTA, MailerQ)
Estos MTAs orientados a alto volumen ofrecen configuración fina por VMTA (virtual MTA), por destino y por hora del día. Permiten:
- Rampa horaria.
- Pause automática si receptor responde 421 más de N veces.
- Fan-out por dominio destino.
Configuración en ESPs
ESPs grandes gestionan throttling por ti. No suele haber controles directos, pero hay decisiones que tú tomas:
- Velocidad del envío (en Mailchimp y similares): lanzar 100K en 5 minutos vs 100K en 4 horas. Velocidad alta = throttle más probable.
- Pool dedicado vs compartido: pool compartido tiene reputación previa, throttle bajo. Dedicado en SES o Postmark requiere warming.
- Hora del envío: enviar fuera de horas pico reduce competencia con throttling general del receptor.
Detectar throttling en tus logs
Patrón regex:
421.*[Rr]ate
421.*[Tt]hrottl
421.*[Tt]ry again
421.*[Dd]eferred
Comando:
grep -E '421.*([Rr]ate|[Tt]hrottl|[Tt]ry again)' /var/log/mail.log
Si ves muchos 421 hacia un receptor concreto:
- Revisa volumen enviado a ese receptor en últimas horas.
- Confirma que las colas se vacían (los reintentos eventualmente entregan).
- Si la cola crece, reduce concurrencia para ese receptor.
Diagnóstico: throttling vs greylisting vs bloqueo
| Síntoma | Throttling | Greylisting | Bloqueo |
|---|---|---|---|
| Código | 421 | 451 4.7.1 | 554 / 550 |
| Persistencia | Mientras dure pico | Una vez al día | Permanente |
| Texto | ”rate limit”, “try later" | "greylisted" | "rejected” |
| Reintento | 5-30 min | 5 min | No |
| Causa | Volumen | Trío nuevo | Reputación / contenido |
Confundirlos lleva a errores: marcar throttling como hard bounce y purgar destinatarios = perder usuarios legítimos.
Más sobre greylisting y bounces.
Estrategias para evitar throttling
1. Distribuir en el tiempo
100K mensajes en 4 horas vs 30 minutos. La curva de envío suaviza picos.
2. Múltiples IPs
Pool de IPs: 5 IPs envían 20K cada una en lugar de 1 IP enviando 100K. Cada IP queda bajo umbral.
3. Conexiones persistentes
smtp_data_pipelining y connection_max_messages permiten enviar varios mensajes por conexión, reduciendo overhead y conexiones simultáneas.
4. Respetar el tempfail window
Si el receptor responde 421, espera al menos 5 minutos antes de reintentar. Reintento inmediato genera más 421 y, en algunos casos, blacklist temporal.
5. Monitorización por receptor
Dashboard con: enviados, aceptados, deferidos, fallidos por receptor. Detección temprana de saturación.
Errores frecuentes
Concurrencia ilimitada por defecto
Postfix con default_destination_concurrency_limit = 50 saturando Gmail desde una IP. Resultado: 421 masivo, cola crece.
No diferenciar destinos
Misma concurrencia para Gmail, Yahoo y un MX corporativo pequeño. El último cae primero.
Rebajar a 1 conexión “para no fallar”
Demasiado conservador. La cola tarda horas en vaciarse y saturas tu propio sistema.
Tratar 421 como hard bounce
Borrar destinatario tras un 421 = pérdida.
Ignorar logs
Si no miras logs, el throttling pasa desapercibido hasta que la cola es enorme.
Pensar que más IPs siempre soluciona
Si el problema es reputación de dominio, añadir IPs no quita el throttle. La causa puede ser contenido o quejas, no IP.
Recursos relacionados
Si quieres profundizar, prueba estas herramientas gratuitas: Domain Health, mail tester, validador SPF y validador DMARC.
¿Necesitas que alguien lleve tu canal de email entero? Abalola Mail es la agencia de email marketing y retención para ecommerce de Abalola para ecommerce: estrategia, producción y operación del stack sobre Klaviyo, Mailchimp o Brevo.