Guide galattiche per aspiranti programmatori

sviluppatrice seduta su uno sgabello con il pc sulle gambe che posiziona un documento su una scheda del pc
Lezione 32 / 33

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 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:pass@smtp.example.com: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.

 

ServizioComando per l’installazione
Amazon SEScomposer require symfony/amazon-mailer
Infobipcomposer require symfony/infobip-mailer
Mailchimp Mandrillcomposer require symfony/mailchimp-mailer
Mailguncomposer require symfony/mailgun-mailer
Mailjetcomposer require symfony/mailjet-mailer
MailPacecomposer require symfony/mail-pace-mailer
MailerSendcomposer require symfony/mailer-send-mailer
Postmarkcomposer require symfony/postmark-mailer
SendGridcomposer require symfony/sendgrid-mailer
Sendinbluecomposer 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('mittente@mail.it')
            ->to('destinatario@mail.it')
            ->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('mittente@mail.it')
            ->to('destinatario@mail.it')
            ->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

Contattaci senza impegno per informazioni sul corso

Scopriamo insieme se i nostri corsi fanno per te. Compila il form e aspetta la chiamata di uno dei nostri consulenti.

Contattaci senza impegno per informazioni sul corso

Pagamento rateale

Valore della rata: A PARTIRE DA 112 €/mese.

Esempio di finanziamento  

Importo finanziato: € 2440 in 24 rate da € 112 – TAN fisso 9,37% TAEG 12,57% – importo totale del credito € 2788,68.

Il costo totale del credito comprende: interessi calcolati al TAN indicato, oneri fiscali (imposta di bollo sul contratto 16,00 euro*) addebitati sulla prima rata, costo mensile di gestione pratica € 3,90, spesa di istruttoria € 0,00, spesa per invio rendicontazione periodica cartacea € 0,98 (o spesa per invio rendicontazione periodica cartacea € 0,00), imposta di bollo su rendicontazione periodica € 0,00. Modalità di rimborso obbligatoria: addebito diretto su c/c. La scadenza delle rate è determinata dal giorno della liquidazione del contratto; la data di scadenza delle rate è prevista il giorno 15 del mese. L’importo di ciascuna rata comprende una quota di capitale crescente e interessi decrescente secondo un piano di ammortamento “alla francese”. Offerta valida dal 01/07/2023 al 31/12/2023.

Messaggio pubblicitario con finalità promozionale. Per le informazioni precontrattuali richiedere sul punto vendita il documento “Informazioni europee di base sul credito ai consumatori” (SECCI) e copia del testo contrattuale. Salvo approvazione di Sella Personal Credit S.p.A. Aulab S.r.l. opera quale intermediario del credito NON in esclusiva.

* In fase di richiesta del finanziamento verrà proposta la facoltà di selezionare, in alternativa all’imposta di bollo sul contratto di 16,00 euro, l’imposta sostitutiva, pari allo 0,25% dell’importo finanziato.

Pagamento rateale

Valore della rata: A PARTIRE DA 183 €/mese.

Esempio di finanziamento 

Importo finanziato: € 3990 in 24 rate da € 183 – TAN fisso 9,37% TAEG 12,57% – importo totale del credito € 4496,56.

Il costo totale del credito comprende: interessi calcolati al TAN indicato, oneri fiscali (imposta di bollo sul contratto 16,00 euro*) addebitati sulla prima rata, costo mensile di gestione pratica € 3,90, spesa di istruttoria € 0,00, spesa per invio rendicontazione periodica cartacea € 0,98 (o spesa per invio rendicontazione periodica cartacea € 0,00), imposta di bollo su rendicontazione periodica € 0,00. Modalità di rimborso obbligatoria: addebito diretto su c/c. La scadenza delle rate è determinata dal giorno della liquidazione del contratto; la data di scadenza delle rate è prevista il giorno 15 del mese. L’importo di ciascuna rata comprende una quota di capitale crescente e interessi decrescente secondo un piano di ammortamento “alla francese”. Offerta valida dal 01/07/2023 al 31/12/2023.

Messaggio pubblicitario con finalità promozionale. Per le informazioni precontrattuali richiedere sul punto vendita il documento “Informazioni europee di base sul credito ai consumatori” (SECCI) e copia del testo contrattuale. Salvo approvazione di Sella Personal Credit S.p.A. Aulab S.r.l. opera quale intermediario del credito NON in esclusiva.

* In fase di richiesta del finanziamento verrà proposta la facoltà di selezionare, in alternativa all’imposta di bollo sul contratto di 16,00 euro, l’imposta sostitutiva, pari allo 0,25% dell’importo finanziato.