Lavorare con le email durante lo sviluppo

Durante lo sviluppo di applicazioni che inviino email, non sempre è desiderabile che le email vengano inviate all’effettivo destinatario del messaggio. Se si utilizza SwiftmailerBundle con Symfony, è possibile evitarlo semplicemente modificano i parametri di configurazione, senza modificare alcuna parte del codice. Ci sono due possibili scelte quando si tratta di gestire le email in fase di sviluppo: (a) disabilitare del tutto l’invio delle email o (b) inviare tutte le email a uno specifico indirizzo.

Disabilitare l’invio

È possibile disabilitare l’invio delle email, ponendo true nell’opzione disable_delivery. Questa è la configurazione predefinita per l’ambiente test della distribuzione Standard. Facendo questa modifica nell’ambiente test le email non verranno inviate durante l’esecuzione dei test ma continueranno a essere inviate negli ambienti prod e dev:

  • YAML
    # app/config/config_test.yml
    swiftmailer:
        disable_delivery:  true
    
  • XML
    <!-- app/config/config_test.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
        disable-delivery="true" />
    
  • PHP
    // app/config/config_test.php
    $container->loadFromExtension('swiftmailer', array(
        'disable_delivery'  => "true",
    ));
    

Se si preferisce disabilitare l’invio anche nell’ambiente dev, basterà aggiungere la stessa configurazione nel file config_dev.yml.

Invio a uno specifico indirizzo

È possibile anche scegliere di inviare le email a uno specifico indirizzo, invece che a quello effettivamente specificato nell’invio del messaggio. Ciò si può fare tramite l’opzione delivery_address:

  • YAML
    # app/config/config_dev.yml
    swiftmailer:
        delivery_address: dev@example.com
    
  • XML
    <!-- app/config/config_dev.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 delivery-address="dev@example.com" />
    
  • PHP
    // app/config/config_dev.php
    $container->loadFromExtension('swiftmailer', array(
        'delivery_address'  => "dev@example.com",
    ));
    

Supponiamo di inviare un’email a destinatario@example.com.

public function indexAction($name)
{
    $message = \Swift_Message::newInstance()
        ->setSubject('Email di saluto')
        ->setFrom('mittente@example.com')
        ->setTo('destinatario@example.com')
        ->setBody(
            $this->renderView(
                'HelloBundle:Hello:email.txt.twig',
                array('name' => $name)
            )
        )
    ;
    $this->get('mailer')->send($message);

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

Nell’ambiente dev, l’email verrà in realtà inviata a dev@example.com. Swiftmailer aggiungerà un’ulteriore intestazione nell’email, X-Swift-To, contenente l’indirizzo sostituito, così da poter vedere a chi sarebbe stata inviata l’email in realtà.

Nota

Oltre alle email inviate all’indirizzo to, questa configurazione blocca anche quelle inviate a qualsiasi indirizzo CC e BCC. Swift Mailer aggiungerà ulteriori intestazioni contenenti gli indirizzi ignorati. Le intestazioni usate saranno X-Swift-Cc e X-Swift-Bcc rispettivamente per gli indirizzi in CC e per quelli in BCC.

Visualizzazione tramite barra di debug

Utilizzando la barra di debug, è possibile visualizzare le email inviate durante la singola risposta nell’ambiente dev. L’icona dell’email apparirà nella barra mostrando quante email sono state spedite. Cliccandoci sopra, un rapporto mostrerà il dettaglio delle email inviate.

Se si invia un’email e immediatamente si esegue un rinvio a un’altra pagina, la barra di debug del web non mostrerà né l’icona delle email né alcun rapporto nella pagina finale.

È però possibile, configurando a true l’opzione intercept_redirects nel file config_dev.yml, fermare il rinvio, in modo da permettere la visualizzazione del rapporto con il dettaglio delle email inviate.

Suggerimento

Alternativamente, è possibile aprire il profilatore in seguito al rinvio e cercare l’URL utilizzato nella richiesta precedente (p.e. /contatti/gestione). Questa funzionalità di ricerca del profilatore permette di ottenere informazioni relative a qualsiasi richiesta pregressa.

  • YAML
    # app/config/config_dev.yml
    web_profiler:
        intercept_redirects: true
    
  • XML
    <!-- app/config/config_dev.xml -->
    
    <!--
        xmlns:webprofiler="http://symfony.com/schema/dic/webprofiler"
        xsi:schemaLocation="http://symfony.com/schema/dic/webprofiler
        http://symfony.com/schema/dic/webprofiler/webprofiler-1.0.xsd">
    -->
    
    <webprofiler:config
        intercept-redirects="true"
    />
    
  • PHP
    // app/config/config_dev.php
    $container->loadFromExtension('web_profiler', array(
        'intercept_redirects' => 'true',
    ));
    

Tabella dei contenuti

Argomento precedente

Usare il cloud per inviare email

Argomento successivo

Lo spool della posta

Questa pagina