Spedire un’email

Spedire email è una delle azioni classiche di ogni applicazione web, ma rappresenta anche l’origine di potenziali problemi e complicazioni. Invece di reinventare la ruota, una soluzione per l’invio di email è l’uso di SwiftmailerBundle, il quale sfrutta la potenza della libreria Swift Mailer. Questo bundle fa parte di Symfony Standard Edition.

Configurazione

Per usare Swift Mailer, occorre configurarlo per il server di posta.

Suggerimento

Invece di usare un server di posta interno, si potrebbe voler usare un fornitore con hosting, come Mandrill, SendGrid, Amazon SES o altri. In questo modo si ottiene un server SMTP, username e password (a volte chiamate chiavi), da usare con la configirazione di Swift Mailer.

In una tipica installazione di Symfony è già inclusa una configurazione per swiftmailer:

  • YAML
    # app/config/config.yml
    swiftmailer:
        transport: "%mailer_transport%"
        host:      "%mailer_host%"
        username:  "%mailer_user%"
        password:  "%mailer_password%"
    
  • XML
    <!-- app/config/config.xml -->
    
    <!--
        xmlns:swiftmailer="http://symfony.com/schema/dic/swiftmailer"
        http://symfony.com/schema/dic/swiftmailer http://symfony.com/schema/dic/swiftmailer/swiftmailer-1.0.xsd
    -->
    
    <swiftmailer:config
        transport="%mailer_transport%"
        host="%mailer_host%"
        username="%mailer_user%"
        password="%mailer_password%" />
    
  • PHP
    // app/config/config.php
    $container->loadFromExtension('swiftmailer', array(
        'transport'  => "%mailer_transport%",
        'host'       => "%mailer_host%",
        'username'   => "%mailer_user%",
        'password'   => "%mailer_password%",
    ));
    

Questi valori (come %mailer_transport%) sono presi dai parametri, impostati nel file parameters.yml. Si possono modificare i valori lì o direttamente qui.

Sono disponibili i seguenti parametri di configurazione:

  • transport (smtp, mail, sendmail o gmail)
  • username
  • password
  • host
  • port
  • encryption (tls o ssl)
  • auth_mode (plain, login o cram-md5)
  • spool
    • type (come accodare i messaggi: sono supportate le opzioni file e memory, vedere Lo spool della posta)
    • path (dove salvare i messaggi)
  • delivery_address (indirizzo email dove spedire TUTTE le email)
  • disable_delivery (impostare a true per disabilitare completamente l’invio)

Invio delle email

Per lavorare con la libreria Swiftmailer occorre creare, configurare e quindi spedire oggetti di tipo Swift_Message. Il “mailer” è il vero responsabile dell’invio dei messaggi ed è accessibile tramite il servizio mailer. In generale, spedire un’email è abbastanza intuitivo:

public function indexAction($nome)
{
    $mailer = $this->get('mailer');
    $messaggio = $mailer->createMessage()
        ->setSubject('Ciao')
        ->setFrom('mittente@example.com')
        ->setTo('destinatario@example.com')
        ->setBody(
            $this->renderView(
                // app/Resources/views/Emails/registrazione.html.twig
                'Emails/registration.html.twig',
                array('nome' => $nome)
            ),
            'text/html'
        )
        /*
         * Se si vuole includere anche una parte in testo semplice
        ->addPart(
            $this->renderView(
                'Emails/registrazione.txt.twig',
                array('nome' => $nome)
            ),
            'text/plain'
        )
        */
    ;
    $mailer->send($messaggio);

    return $this->render(...);
}

Per tenere i vari aspetti separati, il corpo del messaggio è stato salvato in un template che viene poi restituito tramite il metodo renderView().

L’oggetto $messaggio supporta molte altre opzioni, come l’aggiunta di allegati, l’inserimento di HTML e molto altro. Fortunatamente la documentazione di Swift Mailer affronta questo argomento dettagliatamente nel capitolo sulla creazione di messaggi .

Suggerimento

Diversi altri articoli di questo ricettario spiegano come spedire le email in Symfony:

Tabella dei contenuti

Argomento precedente

Email

Argomento successivo

Usare Gmail per l’invio delle email

Questa pagina