Como Trabalhar com E-mails Durante o Desenvolvimento
====================================================
Quando você estiver criando uma aplicação que envia e-mails, muitas vezes não vai
desejar enviar os e-mails ao destinatário especificado, durante o
desenvolvimento. Se você estiver usando o ``SwiftmailerBundle`` com o Symfony2,
poderá facilmente conseguir isso através de definições de configuração sem ter que
fazer quaisquer alterações no código da sua aplicação. Existem duas opções
principais quando se trata de manipulação de e-mails durante o desenvolvimento: (a) desativação do
envio de e-mails totalmente ou (b) o envio de todos os e-mails para um endereço
especificado.
Desativando o Envio
-------------------
Você pode desativar o envio de e-mails, definindo a opção ``disable_delivery``
para ``true``. Este é o padrão para o ambiente ``test`` na distribuição
Standard. Se você fizer isso especificamente na configuração ``test``, então os emails
não será enviados quando você executar testes, mas continuarão a ser enviados nos
ambientes ``prod`` e ``dev``:
.. configuration-block::
.. code-block:: yaml
# app/config/config_test.yml
swiftmailer:
disable_delivery: true
.. code-block:: xml
.. code-block:: php
// app/config/config_test.php
$container->loadFromExtension('swiftmailer', array(
'disable_delivery' => "true",
));
Se você também gostaria de desativar a entrega no ambiente ``dev``, simplesmente
adicione esta configuração ao arquivo ``config_dev.yml``.
Enviando para um Endereço Especificado
--------------------------------------
Você também pode optar por enviar todos os emails para um endereço específico, em vez
do endereço atualmente especificado, ao enviar a mensagem. Isto pode ser feito
através da opção ``delivery_address``:
.. configuration-block::
.. code-block:: yaml
# app/config/config_dev.yml
swiftmailer:
delivery_address: dev@example.com
.. code-block:: xml
.. code-block:: php
// app/config/config_dev.php
$container->loadFromExtension('swiftmailer', array(
'delivery_address' => "dev@example.com",
));
Agora, suponha que você está enviando um email para ``recipient@example.com``.
.. code-block:: php
public function indexAction($name)
{
$message = \Swift_Message::newInstance()
->setSubject('Hello Email')
->setFrom('send@example.com')
->setTo('recipient@example.com')
->setBody($this->renderView('HelloBundle:Hello:email.txt.twig', array('name' => $name)))
;
$this->get('mailer')->send($message);
return $this->render(...);
}
No ambiente ``dev``, o e-mail será enviado para ``dev@example.com``.
O Swiftmailer irá adicionar um cabeçalho extra para o e-mail, ``X-Swift-To`` contendo
o endereço substituído, assim você ainda poderá visualizar para quem ele teria sido
enviado.
.. note::
Além do endereço ``to``, ele também irá parar os e-mails sendo
enviados para quaisquer endereços ``CC`` e ``BCC`` definidos. O SwiftMailer irá adicionar
cabeçalhos adicionais para o e-mail com os endereços substituídos neles.
Eles são ``X-Swift-Cc`` e ``X-Swift-Bcc`` para os endereços ``CC`` e ``BCC``,
respectivamente.
Visualização na Barra de Ferramentas de Debug Web
-------------------------------------------------
Você pode visualizar quaisquer e-mails enviados por uma página quando estiver no ambiente ``dev``
usando a Barra de Ferramentas para Debug Web. O ícone de e-mail na barra de ferramentas irá mostrar
quantos e-mails foram enviados. Se você clicar nele, um relatório mostrando os detalhes dos
e-mails será aberto.
Se você estiver enviando um e-mail e imediatamente executar um redirecionamento, você
precisará definir a opção ``intercept_redirects`` para ``true`` no arquivo ``config_dev.yml``
para que possa ver o e-mail na barra de ferramentas de debug web antes de ser redirecionado.