GUIDE PER ASPIRANTI PROGRAMMATORI
Invio Mail in Symfony: come inviare mail in Symfony
L’invio di email è una funzione comune nelle applicazioni web per notifiche, conferme, newsletter e altro. Symfony fornisce componenti potenti e flessibili per gestire l’invio di email in modo efficiente e sicuro. Uno tra questi è Symfony Mailer. Installazione e configurazione di Symfony Mailer Symfony Mailer è un componente del framework PHP Symfony che fornisce…
Vuoi avviare una nuova carriera o fare un upgrade?
Trova il corso Digital & Tech più adatto a te nel nostro catalogo!
- Server locale con XAMPP
- Come installare XAMPP
- Come configurare XAMPP
- Gestione del Database con phpMyAdmin
- Che cos’è Composer e il suo ruolo in Symfony
- Come installare e come configurare Composer
- Gestione delle dipendenze con Composer
- Autoloading con Composer
- Scripts e Comandi Personalizzati con Composer
- Come configurare Visual Studio Code
- Ambiente di sviluppo Symfony remoto (Editor online Symfony)
L’invio di email è una funzione comune nelle applicazioni web per notifiche, conferme, newsletter e altro. Symfony fornisce componenti potenti e flessibili per gestire l’invio di email in modo efficiente e sicuro. Uno tra questi è Symfony Mailer.
Installazione e configurazione di Symfony Mailer
Symfony Mailer è un componente del framework PHP Symfony che fornisce una solida infrastruttura per l’invio di email in applicazioni web. Iniziamo, quindi, con l’installazione di Symfony Mailer:
composer require symfony/mailer
Le e-mail vengono consegnate attraverso un canale chiamato “transport”. Con la configurazione base di Mailer è possibile utilizzare il protocollo SMTP. Per farlo è sufficiente configurare il DNS all’interno del file .env:
MAILER_DSN=smtp://user:[email protected]:port
sostituiamo, poi, i parametri con i valori che fanno riferimento all’account di posta che vogliamo utilizzare.
Per utilizzare servizi di terze parti come Mailgun o SendGrid, è possibile installare un package specifico per ognuno di essi; di seguito, una tabella con i vari comandi per l’installazione di ciascun servizio.
| Servizio | Comando per l’installazione |
| Amazon SES | composer require symfony/amazon-mailer |
| Infobip | composer require symfony/infobip-mailer |
| Mailchimp Mandrill | composer require symfony/mailchimp-mailer |
| Mailgun | composer require symfony/mailgun-mailer |
| Mailjet | composer require symfony/mailjet-mailer |
| MailPace | composer require symfony/mail-pace-mailer |
| MailerSend | composer require symfony/mailer-send-mailer |
| Postmark | composer require symfony/postmark-mailer |
| SendGrid | composer require symfony/sendgrid-mailer |
| Sendinblue | composer require symfony/sendinblue-mailer |
Come inviare una e-mail in Symfony
Una volta installato Symfony Mailer, entriamo nel vivo e scopriamo come inviare un’e-mail in Symfony, con esempi pratici. Come primo step creiamo il controller che ci servirà per gestire la richiesta di invio e-mail.
php bin/console make:controller MailController
Creiamo una route /mail collegata al metodo sendEmail:
#[Route('/mail', name: 'app_send_mail')]
public function sendEmail(MailerInterface $mailer): Response
{
$email = (new Email())
->from('[email protected]')
->to('[email protected]')
->subject('E-mail da Symfony!')
->text('Hello world');
$mailer->send($email);
return new Response('e-mail inviata');
}
sendEmail utilizza MailerInterface per poter definire i parametri della e-mail from, to, subject e text e il metodo send per effettuare l’invio. Il messaggio verrà inviato immediatamente attraverso il transport configurato, nel nostro esempio SMTP.
Con il browser richiediamo l’URL symfony-test.local/mail per innescare l’invio della e-mail attraverso il Controller sendEmail

Il controller ci ha risposto con la Response che abbiamo impostato ovvero il testo “e-mail inviata”. Verifichiamo cosa è avvenuto effettivamente grazie a Symfony Profiler:

Accediamo alla sezione Email della richiesta per notare come, effettivamente, lo stato di invio è Sent e il transport utilizzato è SMTP. In basso, è presente anche il contenuto della e-mail inviata, in questo caso il testo “Hello world”.
Utilizzare i template Twig per le e-mail
E se ti dicessimo che le e-mail da inviare possono essere personalizzate? Questo è possibile attraverso i template di Twig. In questo modo è possibile utilizzare linguaggio HTML e CSS e accedere a delle variabili del context dell’oggetto TemplatedEmail.
/templates/email/test.html.twig
<style>
h1 {
color: yellow;
background-color: red;
}
</style>
<h1>Ciao {{ email.to[0].address }}!</h1>
<p>
Il tuo ordine {{ numero_ordine }} è stato spedito.
</p>
<p>
La consegna è prevista tra {{ giorni_consegna }} giorni.
</p>
Modifichiamo il controller per utilizzare il template appena creato. Invece dell’oggetto Email utilizzato in precedenza, questa volta è necessario istanziare la classe TemplatedEmail. Questa classe estende Email aggiungendo dei metodi per gestire i template Twig:
#[Route('/mail', name: 'app_send_mail')]
public function sendEmail(MailerInterface $mailer): Response
{
$email = (new TemplatedEmail())
->from('[email protected]')
->to('[email protected]')
->subject('E-mail da Symfony!')
->htmlTemplate('emails/test.html.twig')
->context([
'numero_ordine' => 'AX34281',
'giorni_consegna' => 5
]);
$mailer->send($email);
return new Response('e-mail inviata');
}
Il template Twig ha accesso ad ogni parametro che è passato all’interno di context(), un metodo della classe TemplatedEmail, e ad una variabile speciale chiamata email con i dettagli di mittenti e destinatari previsti.
Risultato:

CONTENUTI GRATUITI IN EVIDENZA
Guide per aspiranti programmatori 👨🏻🚀
Vuoi muovere i primi passi nel Digital e Tech? Abbiamo preparato alcune guide per aiutarti a orientarti negli ambiti più richiesti oggi.