Invio Mail in Symfony: come inviare mail in Symfony | Aulab

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…

Lezione 32 / 33
Enza Neri
Immagine di copertina

Vuoi avviare una nuova carriera o fare un upgrade?

Trova il corso Digital & Tech più adatto a te nel nostro catalogo!

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

invio mail symfony

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:

invio mail symfony

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:

invio mail symfony

Sei indeciso sul percorso? 💭

Parliamone! Scrivici su Whatsapp e risponderemo a tutte le tue domande per capire quale dei nostri corsi è il più adatto alle tue esigenze.

Oppure chiamaci al 800 128 626