tutte le guide

// come risolvere

SMTP "421 Too many connections" o limite di frequenza: come risolvere

Il server ricevente risponde 421 too many connections o rate limit? Rallenta i tuoi invii con meno connessioni, oppure regola i limiti di Postfix.

Cosa significa

Una risposta 421 significa "non ora, riprova più tardi". Il server ricevente chiude la connessione perché ne hai aperte troppe contemporaneamente, o hai inviato troppo in fretta. È un errore temporaneo: un normale server di posta conserva il messaggio e riprova. Sui server Postfix, il messaggio di solito è simile a questo:

421 4.7.0 mx.example.com Error: too many connections from 203.0.113.10

Altri server lo dicono in modo diverso ("Too many concurrent SMTP connections", "Try again later, closing connection", "rate limited"). Un messaggio Postfix simile è 450 4.7.1 Error: too much mail from 203.0.113.10 (limite di frequenza dei messaggi).

Alcuni grandi provider hanno codici propri, con guide dedicate: Gmail 421 4.7.28 e Microsoft 451 4.7.500; Yahoo ha i suoi codici TSS.

Perché succede

  • Troppe connessioni in parallelo. La tua app o il tuo server apre molte connessioni insieme (una newsletter, o uno script che invia ogni email in una connessione separata).
  • Troppi messaggi al minuto da un solo IP o da un solo account.
  • Reputazione bassa o nuova. I destinatari accettano meno dagli IP che non conoscono, quindi un volume che va bene per un vecchio IP fa scattare i limiti su uno nuovo.
  • IP condiviso. Altri clienti sullo stesso IP consumano parte della quota.
  • I limiti del tuo stesso server, se è il tuo server a rispondere 421 alle tue app o a un partner.
  • Limiti dell'account di invio. I provider di posta limitano le sessioni SMTP e i messaggi per account; un 421 o un 4.7.0 durante un grosso invio da una normale casella è frequente.

Come verificare

  1. Scopri chi risponde. L'hostname nella riga 421 ti dice se si tratta del server del destinatario, del relay del tuo provider o del tuo stesso server.
  2. Sul tuo Postfix di invio, guarda i messaggi rimandati:
    postqueue -p | grep -i "too many" | sort | uniq -c
    grep "421" /var/log/mail.log | tail
  3. Sul tuo Postfix di ricezione, il servizio anvil registra i picchi:
    grep "anvil" /var/log/mail.log | tail
    postconf smtpd_client_connection_count_limit smtpd_client_connection_rate_limit smtpd_client_message_rate_limit anvil_rate_time_unit
  4. Controlla la reputazione: cerca il tuo IP di invio nelle blacklist e invia un test all'indirizzo unico indicato nella home page di Delivmail. Un report pulito significa che il limite riguarda il volume, non un blocco.

Come risolvere

Se sei il mittente: invia più lentamente

In un'app con nodemailer, riusa poche connessioni invece di aprirne una per messaggio:

const transporter = nodemailer.createTransport({
  host: 'smtp.example.com',
  port: 587,
  pool: true,          // reuse connections
  maxConnections: 2,   // parallel connections
  maxMessages: 100,    // messages per connection
  rateDelta: 1000,     // time window in ms
  rateLimit: 5,        // messages per window
  auth: { user: 'you@yourdomain.com', pass: process.env.SMTP_PASS }
});

Con Postfix, rallenta solo la destinazione che si lamenta, usando un transport dedicato. In master.cf:

slow      unix  -       -       n       -       2       smtp

In main.cf:

transport_maps = hash:/etc/postfix/transport
slow_destination_concurrency_limit = 2
slow_destination_rate_delay = 1s

E in /etc/postfix/transport, poi postmap /etc/postfix/transport e systemctl reload postfix:

example.com    slow:

Distribuisci le grandi campagne nel tempo e, se il tuo IP o il tuo dominio sono nuovi, aumenta il volume per gradi (vedi riscaldare un nuovo dominio o IP). Non alternare IP o account per aggirare i limiti: i destinatari se ne accorgono e la tua reputazione ne risente.

Se è il tuo server a rispondere 421

I valori predefiniti (smtpd_client_connection_count_limit = 50 per client, limiti di frequenza disattivati) vanno bene per la maggior parte dei server. Se hai impostato limiti più severi, alzali, oppure escludi i mittenti fidati come le tue app:

smtpd_client_event_limit_exceptions = $mynetworks, 203.0.113.10

Per le app, una soluzione migliore è inviare tramite la porta submission con un pool di poche connessioni, come sopra.

Verifica che sia risolto

Osserva il log durante il prossimo invio: i messaggi rimandati devono lasciare la coda con status=sent e le nuove righe 421 devono cessare. Invia un nuovo test Delivmail per confermare che autenticazione e reputazione sono pulite, poi reinvia all'indirizzo per cui il messaggio era stato rimandato, se alla fine è rimbalzato.

Verifica che sia risolto

Una modifica DNS può richiedere da pochi minuti a qualche ora. Poi invia una nuova email di test o scansiona di nuovo il tuo dominio.

Guide correlate