2mail — SMTP relay su infrastruttura belga

SMTP per Laravel — posta dalla tua applicazione che arriva

Laravel ha un livello di posta completo integrato, con code, template e notifiche. Ciò che non fornisce è la recapitabilità: quella dipende dal server attraverso cui invii, e la configurazione predefinita su un server appena creato è raramente un buon mittente.

Laravel legge le impostazioni di posta dalla configurazione d'ambiente. Lì modifichi i dati SMTP e il resto della tua applicazione resta invariato — non serve toccare mailable, notifiche o code.

Perché senza relay le cose vanno storte

Un'applicazione in sviluppo invia verso un indirizzo di prova e sembra tutto a posto. Al passaggio in produzione cambia il pubblico: indirizzi reali presso provider reali, che controllano davvero autenticazione e reputazione. È il momento in cui le e-mail di recupero password improvvisamente non arrivano più — a una parte degli utenti, il che rende il problema difficile da riconoscere.

Configurare l'SMTP in Laravel

1

Recupera i dati

Accedi al tuo account 2mail e recupera lì il tuo server SMTP, il nome utente e la password.

2

Inserisci in Laravel

Le impostazioni di posta stanno nel file d'ambiente della tua applicazione, non nel codice. Imposti il mailer su SMTP e inserisci i cinque dati qui sotto. Non dimenticare l'indirizzo e il nome del mittente: sono impostazioni separate accanto ai dati di connessione.

3

Autentica il dominio

Assicurati che SPF, DKIM e DMARC siano configurati correttamente per il tuo dominio, così i destinatari possono verificare che il messaggio provenga da te.

4

Prova

Invia dalla tua piattaforma un messaggio di prova a un indirizzo presso un grande provider e verifica che arrivi nella posta in arrivo e non nella cartella spam.

I campi richiesti da Laravel

Ogni piattaforma li chiama in modo leggermente diverso, ma si tratta sempre degli stessi cinque. I valori concreti sono legati al tuo account e li trovi nel tuo account 2mail — recuperali da lì, così sei certo di usare quelli giusti.

Campo Che cosa inserire
Server SMTP (host)Il nome del server dal tuo account 2mail.
PortaLa porta corrispondente alla cifratura scelta; il tuo account indica quale.
CifraturaTLS. Non inviare mai in chiaro — altrimenti le tue credenziali viaggiano leggibili sulla rete.
Nome utenteIl login SMTP del tuo account 2mail.
PasswordLa password corrispondente. Non usare mai la password della casella di posta di un collaboratore.

Configurazione SMTP per Laravel nel codice

Esempi funzionanti per la porta 587 con STARTTLS, pronti da copiare. Sostituisci l'indirizzo mittente con un indirizzo del tuo dominio e verifica nome del server e login nel tuo account 2mail. La password va in una variabile d'ambiente — mai nel codice e mai nel controllo di versione.

Il file .env: le variabili MAIL_*

Laravel legge tutti i dati di connessione da .env. La porta 587 funziona con STARTTLS: la connessione parte in chiaro e viene elevata a TLS prima ancora che le tue credenziali passino sulla linea. La password sta soltanto nel file .env sul server — un file che non deve finire nel controllo di versione. Sostituisci example.com con un dominio che hai autenticato in 2mail.

MAIL_MAILER=smtp
MAIL_HOST=relay.2mail.eu
MAIL_PORT=587
MAIL_USERNAME="<2mail-smtp-login>"
MAIL_PASSWORD="<2mail-smtp-password>"
MAIL_FROM_ADDRESS="noreply@example.com"
MAIL_FROM_NAME="${APP_NAME}"

# Only when config/mail.php still has an 'encryption' key (older projects):
MAIL_ENCRYPTION=tls

# When config/mail.php has a 'scheme' key instead: leave MAIL_SCHEME unset.
# "smtp" on port 587 upgrades to STARTTLS by itself; "tls" is not a valid scheme.

config/mail.php: il mailer smtp

In un progetto standard qui non devi modificare nulla: il file si limita a leggere le variabili da .env. Controllalo però quando un'impostazione non ha effetto — un host scritto direttamente in questo file prevale sempre sul tuo .env. I progetti recenti hanno una chiave scheme, quelli più vecchi una chiave encryption; il resto è identico.

// config/mail.php
'default' => env('MAIL_MAILER', 'smtp'),

'mailers' => [
    'smtp' => [
        'transport' => 'smtp',
        'scheme' => env('MAIL_SCHEME'),                    // newer projects
        // 'encryption' => env('MAIL_ENCRYPTION', 'tls'),  // older projects use this key instead
        'host' => env('MAIL_HOST', 'relay.2mail.eu'),
        'port' => env('MAIL_PORT', 587),
        'username' => env('MAIL_USERNAME'),
        'password' => env('MAIL_PASSWORD'),
        'timeout' => null,
    ],
],

'from' => [
    'address' => env('MAIL_FROM_ADDRESS', 'noreply@example.com'),
    'name' => env('MAIL_FROM_NAME', 'Example'),
],

Inviare un'e-mail di prova con Tinker

Svuota prima la cache della configurazione, altrimenti stai ancora provando le vecchie impostazioni. Mail::raw invia in modo sincrono: un errore in host, porta o credenziali lo vedi subito nel terminale, e non soltanto più tardi nel log della coda. Invia a un indirizzo esterno presso un grande provider.

php artisan config:clear
php artisan tinker

# At the tinker prompt:
Mail::raw('Sent through the 2mail SMTP relay.', fn ($m) => $m->to('you@example.org')->subject('SMTP test'));

Quali e-mail invia Laravel

Una volta configurato il relay, tutte queste passano tramite 2mail — non devi configurarle una per una.

Recupero password e verifica dell'indirizzo e-mail
Notifiche ed e-mail di evento dall'applicazione
Fatture e messaggi relativi agli abbonamenti
Report da attività pianificate
Segnalazioni di errore agli amministratori

Insidie con Laravel

La coda deve girare

Se metti la posta in coda senza un worker attivo, non parte nulla e non vedi alcun errore. In caso di problema di recapito questo dovrebbe essere il primo controllo, non l'ultimo.

Cache della configurazione dopo una modifica

Se la tua applicazione gira con una configurazione in cache, le impostazioni di posta modificate restano senza effetto finché quella cache non viene rigenerata. Un'impostazione che "non funziona" spesso semplicemente non è ancora stata letta.

Ambienti di test che inviano davvero

Un ambiente di staging con una copia del database di produzione può inviare senza accorgersene a clienti reali. Limita esplicitamente i destinatari lì, oppure usa un accesso separato.

Messaggi di errore frequenti con Laravel

I messaggi che compaiono quando host, porta, cifratura o login non sono corretti — riportati alla lettera, così li riconosci nel tuo log, con accanto la causa e la soluzione.

Messaggio Causa Soluzione
Connection could not be established with host "relay.2mail.eu:587": stream_socket_client(): Unable to connect to relay.2mail.eu:587 (Connection timed out) Il tuo server non raggiunge il relay. Di solito il firewall del tuo provider di hosting blocca il traffico in uscita sulla porta 587, oppure c'è un errore di battitura in MAIL_HOST o MAIL_PORT. Prova dallo stesso server con openssl s_client -starttls smtp -connect relay.2mail.eu:587. Se non arriva alcuna risposta, chiedi al tuo provider di hosting di aprire il traffico in uscita sulla porta 587.
Connection could not be established with host "ssl://relay.2mail.eu:587": stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages: error:…:SSL routines::wrong version number Lo scheme è impostato su smtps (oppure, in un progetto più vecchio, MAIL_ENCRYPTION=ssl). Laravel si aspetta allora TLS dal primo byte, mentre la porta 587 parte in chiaro e passa a TLS solo dopo, tramite STARTTLS. Lascia MAIL_SCHEME vuoto oppure impostalo su smtp; in un progetto più vecchio imposta MAIL_ENCRYPTION=tls. La porta resta la 587.
Failed to authenticate on SMTP server with username "…" using the following authenticators: "LOGIN", "PLAIN". … Expected response code "235" but got code "535" Il relay rifiuta le credenziali: nome utente o password errati, una password con uno spazio o un # che in .env non è racchiusa tra virgolette, oppure una vecchia configurazione rimasta in cache. Racchiudi il valore tra virgolette doppie, esegui php artisan config:clear e usa il login SMTP del tuo account 2mail — non la password di una casella di posta.
The "tls" scheme is not supported; supported schemes for mailer "smtp" are: "smtp", "smtps". MAIL_SCHEME contiene tls. Quella variabile non è il successore di MAIL_ENCRYPTION: conosce soltanto smtp e smtps. Rimuovi MAIL_SCHEME oppure impostalo su smtp. Sulla porta 587 il mailer passa da solo a STARTTLS.
Expected response code "250/251/252" but got code "554", with message "554 5.7.1 <noreply@example.com>: Sender address rejected" Le credenziali sono corrette, ma l'indirizzo mittente è su un dominio che non è collegato al tuo account 2mail. Spesso MAIL_FROM_ADDRESS contiene ancora il valore predefinito del file di esempio. Imposta MAIL_FROM_ADDRESS su un indirizzo di un dominio che hai aggiunto in 2mail, e verifica che nessun Mailable imposti un proprio from() su un altro dominio.
SPF, DKIM e DMARC spiegati La recapitabilità

Un'altra piattaforma?

L'SMTP è un protocollo standard: ogni sistema che parla SMTP — un CRM, un ERP, un'applicazione proprietaria o un server — può inviare tramite 2mail con gli stessi cinque campi.

Domande frequenti sull'SMTP per Laravel

Laravel fornisce il livello di posta, non la recapitabilità: quella dipende dal server attraverso cui invii. La configurazione predefinita su un server appena creato è raramente un buon mittente, perché non c'è autenticazione né reputazione consolidata.
Nel file d'ambiente della tua applicazione, non nel codice. Imposti il mailer su SMTP e inserisci host, porta, nome utente, password e cifratura. Non dimenticare l'indirizzo e il nome del mittente — sono impostazioni separate accanto alle altre.
Se la tua applicazione gira con una configurazione in cache, le impostazioni di posta modificate restano senza effetto finché quella cache non viene rigenerata. Un'impostazione che "non funziona" spesso semplicemente non è ancora stata letta.
Controlla che la coda venga elaborata. Se metti la posta in coda senza un worker attivo, non parte nulla e non compare nemmeno un messaggio di errore. Questo dovrebbe essere il primo controllo, non l'ultimo.
Un ambiente di staging con una copia del database di produzione può inviare senza accorgersene a indirizzi reali. Limita esplicitamente i destinatari lì, oppure usa un accesso separato così puoi seguire quel traffico a parte.
Trust Guard Security Scanned
Chiama ora
Invia un'e-mail