Le mail non partono dal VPS: la porta 25 e cosa fare invece
Il sito è su, ma le mail non arrivano: quasi sempre è la porta 25 bloccata dal fornitore. Come verificarlo e come instradare la posta sulla 587.
Redazione UptimeMag · 11 ottobre 2026 · 5 minuti di lettura

Il sintomo, in una riga
Il modulo di contatto del sito non manda la mail di conferma, oppure mail() di PHP non dà errore ma il messaggio non arriva mai a destinazione. Non è il sito che non funziona: è la connessione in uscita dal server verso un server di posta che non parte proprio, e di solito la causa è che il tuo fornitore ha chiuso la porta 25 in uscita.
Verifica più rapida: un comando, trenta secondi
Prima di toccare configurazioni, controlla se la porta è aperta. Su Ubuntu 24.04, da riga di comando:
nc -vz -w 5 smtp.gmail.com 25
Se la porta è aperta, nc segnala la connessione riuscita quasi subito. Se è bloccata dal fornitore, il comando resta fermo per i cinque secondi del timeout e poi segnala che la connessione non è andata a buon fine, senza nessuna risposta dal server remoto (niente banner "220"). Questo è il segnale che distingue il blocco di rete da un problema di configurazione: se fosse un errore nel tuo Postfix o nel tuo firewall locale, di solito la connessione viene rifiutata subito ("connection refused"), non resta appesa fino al timeout.
Ripeti lo stesso test sulla porta 587 e sulla 465:
nc -vz -w 5 smtp.gmail.com 587
nc -vz -w 5 smtp.gmail.com 465
Se la 25 è muta e la 587 risponde, hai già la diagnosi e la soluzione nello stesso comando.
Causa più frequente: il fornitore blocca la 25 di default
Quasi tutti i fornitori di VPS a basso costo bloccano il traffico SMTP in uscita sulla porta 25 per impedire che i loro server vengano usati per spam. Le politiche cambiano molto da un fornitore all'altro, e spesso non vengono segnalate in modo chiaro al momento dell'acquisto.
Su DigitalOcean il blocco è il più severo: secondo la documentazione ufficiale, "Your best bet is to either: Reach out to DigitalOcean support and ask if they can review your account and unblock it (they don't always do it, but worth a try), Or use a service like smtpfa.st , SendGrid, Mailgun, or Postmark". Nella pagina ufficiale di supporto si legge che SMTP ports 25, 465, and 587 are blocked on Droplets to prevent spam and other abuses on our platform. This block applies to all Droplets by default and includes traffic passing through a Reserved IP address. DigitalOcean consiglia direttamente di usare un provider di posta elettronica come servizio di terze parti invece di aprire un ticket.
Su Hetzner il blocco è temporaneo e meno drastico: le nuove installazioni hanno la porta 25 bloccata in uscita per le prime 24-48 ore come verifica anti-abuso, dopodiché la porta viene sbloccata automaticamente. Se il blocco persiste oltre le 48 ore, va aperto un ticket di supporto con una motivazione d'uso legittimo. Diversi utenti riportano inoltre che Hetzner richiede di essere cliente da almeno un mese e di aver pagato almeno una fattura prima di accettare la richiesta di sblocco sul modulo dedicato.
Un punto che molti sistemisti scoprono solo dopo ore di troubleshooting: la porta 587, quella per l'invio autenticato (submission), spesso resta aperta anche quando la 25 è bloccata. Prima di aprire un ticket, vale sempre la pena controllare la 587.
Come si capisce se il problema è tuo o del fornitore
Guarda il log di Postfix. Su Ubuntu con Postfix, secondo la documentazione ufficiale di Ubuntu Server, Postfix invia tutti i messaggi di log a /var/log/mail.log, mentre errori e avvisi vengono scritti anche in /var/log/mail.err e /var/log/mail.warn. Da riga di comando:
sudo tail -f /var/log/mail.err
Se nel log non compare nessun tentativo di connessione in uscita verso il relay o il server di destinazione, il problema è a monte, nella rete del fornitore, non in Postfix. Se invece il log mostra un tentativo di connessione che si chiude con "Connection timed out" dopo diversi secondi, è lo stesso sintomo visto con nc: porta bloccata dal fornitore.
Su cPanel con Exim il log equivalente è /var/log/exim_mainlog; su Plesk, il pannello cambia per default il percorso del log postfix da /var/log/mail.log a /var/log/maillog: se cerchi il file nel posto sbagliato sembra che manchi anche se la posta sta effettivamente transitando.
La soluzione che conviene quasi sempre: relay autenticato sulla 587
Invece di rincorrere lo sblocco della 25 — che su alcuni fornitori non arriva mai — la strada più stabile è instradare tutta la posta in uscita attraverso un servizio di invio con autenticazione sulla porta 587, con STARTTLS. Il server non fa più da mail server a tutti gli effetti: si limita a consegnare il messaggio a un relay esterno, che poi lo recapita.
Configurazione nell'applicazione
Se l'applicazione (WordPress, un CMS, uno script PHP) invia la posta direttamente via SMTP, basta cambiare i parametri di connessione: host del relay, porta 587, autenticazione con utente e password, cifratura STARTTLS (non SSL/TLS implicito, che di solito gira sulla 465). La maggior parte dei plugin SMTP per WordPress e delle librerie come PHPMailer ha questi campi separati: non confondere "porta" con "tipo di cifratura", sono due impostazioni diverse e un errore qui dà un fallimento diverso da quello della porta bloccata (di solito un rifiuto esplicito del server, non un timeout).
Configurazione nel sistema (Postfix come relay)
Su Ubuntu 24.04 con Postfix, per instradare tutta la posta locale attraverso un relay esterno autenticato si imposta il parametro relayhost in /etc/postfix/main.cf indicando il relay e la porta 587, insieme alle credenziali SASL in un file separato (tipicamente /etc/postfix/sasl_passwd), poi si ricarica il servizio:
sudo systemctl reload postfix.service
Su cPanel ed Exim, l'instradamento verso uno smarthost si configura dal "Exim Configuration Manager" nel pannello, nella sezione dei percorsi di consegna. Su Plesk, l'opzione equivalente si trova nelle impostazioni del server di posta, dove si può indicare un relay SMTP esterno con autenticazione.
Come si verifica che è risolto
Dopo la modifica, manda un messaggio di prova verso un indirizzo che puoi controllare (una tua casella Gmail va bene) e segui il log in tempo reale:
sudo tail -f /var/log/mail.log
Una consegna riuscita attraverso il relay termina con una riga che contiene status=sent e il codice di risposta del server remoto. Se invece compaiono righe con SASL authentication failed, il problema non è più la porta ma le credenziali inserite: va controllato il nome utente e la password del relay, non la rete.
Cosa scrivere all'assistenza se il blocco è del fornitore
Se dopo il test con nc risulta che la porta 25 è bloccata e vuoi comunque chiedere lo sblocco (ha senso solo se devi gestire un vero mail server, non per il semplice invio di notifiche applicative), nel ticket vanno allegati: l'ID della macchina o del droplet, il dominio da cui invierai la posta, una descrizione sintetica dell'uso (es. "server di posta per il dominio X, con reverse DNS configurato") e la conferma che rispetterai le pratiche anti-spam di base (SPF, DKIM). Senza questi elementi il ticket viene quasi sempre rimandato indietro per integrazione.
Questa guida fa parte della serie UptimeMag dedicata agli errori ricorrenti di chi gestisce un server: niente teoria del protocollo SMTP, solo il comando giusto per ogni causa.
Testo redatto con il supporto dell'intelligenza artificiale e verificato dalla redazione (AI Act, art. 50).