Il form funziona, ma nessuno riceve nulla
Il cliente compila il form contatti, clicca "Invia", vede il messaggio di conferma — ma l email non arriva mai. Oppure arriva nella cartella spam. E un problema cosi comune che molte aziende perdono contatti per settimane senza accorgersene, convinte che semplicemente nessuno stia scrivendo. In base alla mia esperienza, almeno il 30% dei siti di piccole aziende ha questo problema attivo in questo momento.
La causa quasi sempre e la stessa: il sito prova a inviare email usando la funzione mail() nativa di PHP, che si appoggia al server di hosting. Quel server non e configurato per l invio di email e non ha nessuna reputazione agli occhi dei filtri antispam. Il risultato e prevedibile: le email vengono ignorate o marcate come sospette dai server di destinazione come Gmail, Outlook e Yahoo.
Diagnosi del problema: capire dove si blocca l email
Prima di intervenire serve capire esattamente cosa sta succedendo. Il percorso di un email dal form alla casella di posta ha diversi punti dove puo fallire:
Il form non invia affatto
Il primo controllo e verificare che il form funzioni lato codice. Controlla i log di PHP per errori, verifica che la funzione di invio venga effettivamente chiamata (aggiungi un log temporaneo) e testa con un indirizzo email diverso. Se il form usa AJAX, controlla la console del browser per errori JavaScript. Se il form mostra il messaggio di successo ma il codice di invio non viene eseguito, probabilmente c e un problema di validazione o di routing.
L email parte ma viene rifiutata
Se il codice di invio funziona ma l email non arriva, il problema e nel trasporto. Controlla il mail log del server (di solito in /var/log/mail.log o /var/log/maillog). Cerca messaggi di errore come "550 rejected", "authentication required" o "SPF check failed". Questi messaggi ti dicono esattamente perche il server di destinazione rifiuta l email.
L email arriva ma finisce in spam
Se l email arriva nella cartella spam, il problema e di reputazione e autenticazione. Il server di destinazione ha ricevuto l email ma non si fida del mittente. Questo e il caso piu frequente ed e causato dalla mancanza di autenticazione del dominio.
La soluzione definitiva: SMTP esterno e autenticazione del dominio
L intervento corretto prevede due passaggi fondamentali che risolvono il 95% dei problemi di deliverability delle email:
Passo 1: usare un servizio SMTP dedicato
Invece della funzione mail() nativa, configurare l invio attraverso un servizio SMTP con reputazione verificata. Le opzioni migliori in base al volume e al budget:
- Brevo (ex Sendinblue): 300 email gratuite al giorno. Perfetto per siti con form contatti standard. Setup semplice, dashboard chiara, API e SMTP disponibili
- Mailgun: orientato agli sviluppatori, ottima API, 1000 email gratuite per i primi 3 mesi. Ideale per applicazioni con invio programmatico
- Postmark: focalizzato sulle email transazionali (conferme, reset password, notifiche). Tassi di deliverability eccellenti, prezzo leggermente piu alto
- Amazon SES: il piu economico per volumi alti (0.10$ per 1000 email). Richiede piu configurazione manuale ma scala senza limiti
La configurazione in PHP e semplice. Con una libreria come PHPMailer o Symfony Mailer servono poche righe: host SMTP, porta (generalmente 587 con TLS), username e password del servizio. In un framework come Laravel la configurazione e ancora piu immediata tramite il file .env.
Passo 2: configurare i record DNS del dominio
Anche con un SMTP eccellente, senza autenticazione del dominio le email possono finire in spam. Tre record DNS sono essenziali:
- SPF (Sender Policy Framework): un record TXT che dice "solo questi server sono autorizzati a inviare email per conto del mio dominio". Esempio:
v=spf1 include:sendinblue.com ~all. Senza SPF, chiunque puo inviare email fingendo di essere il tuo dominio - DKIM (DomainKeys Identified Mail): una firma crittografica aggiunta a ogni email che certifica che il messaggio non e stato alterato durante il trasporto. Il servizio SMTP fornisce la chiave pubblica da aggiungere come record DNS
- DMARC (Domain-based Message Authentication): definisce cosa fare quando SPF e DKIM falliscono. Un record DMARC base come
v=DMARC1; p=quarantine; rua=mailto:dmarc@tuodominio.itdice ai server di mettere in quarantena le email non autenticate e di inviarti report
Verificare che tutto funzioni
Dopo la configurazione, invia un email di test a mail-tester.com: assegna un punteggio da 1 a 10 e spiega esattamente cosa manca. Puntare a 9 o 10 e realistico con la configurazione giusta. Verifica anche con mxtoolbox.com che i record DNS siano configurati correttamente e propagati.
Testa l invio verso diversi provider: Gmail, Outlook, Yahoo e qualche casella PEC italiana. Ogni provider ha filtri diversi e un email che arriva bene su Gmail potrebbe finire in spam su Outlook.
Sicurezza aggiuntiva: il fallback nel database
Dopo l intervento vale la pena aggiungere un fallback: salvare ogni messaggio del form anche nel database del sito, cosi anche se un email dovesse perdersi il contatto non va perduto. Una tabella contact_messages con i campi del form, il timestamp e lo stato di invio dell email. In piu, un pannello admin che mostra tutti i messaggi ricevuti con la possibilita di filtrare quelli per cui l invio email e fallito.
Errori comuni da evitare
- Usare un indirizzo mittente generico: l email deve partire da un indirizzo del tuo dominio (es.
noreply@tuodominio.it), non da un Gmail o un indirizzo inventato - Non gestire i rimbalzi: se un email rimbalza (indirizzo inesistente, casella piena) e continui a inviare, la reputazione del mittente peggiora. I servizi SMTP gestiscono i bounce automaticamente
- Inviare email HTML senza versione plain text: i filtri antispam penalizzano le email con solo HTML. Includi sempre una versione testuale alternativa
- Non loggare gli errori di invio: senza log, quando qualcosa si rompe non sai nemmeno cosa cercare. Logga ogni tentativo di invio con il risultato (successo o errore con dettaglio)
Con SMTP dedicato, DNS configurato e un sistema di fallback, il problema delle email che non arrivano si risolve definitivamente. E un intervento che richiede poche ore di lavoro ma che puo recuperare decine di contatti persi ogni mese.