
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.