開発中におけるメール送信の扱い方¶
メールを送信するアプリケーションを開発している際に、開発中では、実際に受信者にメールを送信したくないときもあると思います。 Symfony2 の SwiftmailerBundle を使用すれば、コードの変更をすることなしに、コンフィギュレーションの設定を変更するだけで、この問題を簡単に解決することができます。開発中では、メール送信の処理に関して、主に2つの選択をすることができます。: (a) メール送信を無効にする (b) 特定のメールアドレスにメールを送信する
メール送信を無効にする¶
disable_delivery オプションを true に設定すればメール送信を無効にすることができます。 Symfony の Standard Distribution の test 環境では、デフォルトでメール送信を無効にしており、この設定になっています。 test 環境でこのようによう指定しているため、テストを実行する際にメールは送信されません。しかし、 prod や 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", ));
dev 環境でも送信を無効にしたい際には、 config_dev.yml ファイルに同じ設定を追加するだけです。
特定のメールアドレスに送信する¶
また、メッセージを送信する際に、実際に指定したメールアドレスではなく、全てのメールの送信先を特定のアドレスにすることもできます。 delivery_address オプションを使用してこの設定ができます。
-
YAML
# app/config/config_dev.yml swiftmailer: delivery_address: [email protected]
-
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="[email protected]" />
-
PHP
// app/config/config_dev.php $container->loadFromExtension('swiftmailer', array( 'delivery_address' => "[email protected]", ));
そして、次のように recipient@example.com にメールを送信しようとしてみます。
public function indexAction($name)
{
$message = \Swift_Message::newInstance()
->setSubject('Hello Email')
->setFrom('[email protected]')
->setTo('[email protected]')
->setBody($this->renderView('HelloBundle:Hello:email.txt.twig', array('name' => $name)))
;
$this->get('mailer')->send($message);
return $this->render(...);
}
dev 環境では、メールは、 recipient@example.com には送信されずに dev@example.com に送信されます。 Swiftmailer は、置き換えられたアドレスを X-Swfit-To に指定して、メールのヘッダーに追加します。そうすることによって、実際に送信したかったアドレスを参照することができます。
Note
to に指定したアドレスのみならず、 CC や BCC に指定したアドレスにも送信されることはありません。 Swiftmailer はこれらのアドレスを上書きして、 CC であれば、 X-Swift-Cc に、 BCC であれば、 X-Swift-BCC としてメールヘッダに追加します。
ウェブデバッグツールバーで参照する¶
dev 環境を使用していれば、そのページで送信されたメールは、ウェブデバッグツールバーを使って参照することができます。ツールバーのメールアイコンは送信したメールの数を表しています。そのアイコンをクリックすると、メールの詳細のレポートを見ることができます。
メール送信処理の直後に他のページへリダイレクトする際にはウェブデバッグツールバーは、メールアイコンもレポートもそのリダイレクト後のページに表示されません。
そこで、 config_dev.yml ファイルの intercept_redirects オプションを true にして、リダイレクトを止め、送信メールの詳細のレポートを開くことができるようにすることができます。
Tip
また、他の方法として、リダイレクト後のプロファイラを開き、前のリクエスト ( /contact/handle など)のサブミット URL を探すこともできます。プロファイラの検索機能を使えば、過去のリクエストを全てプロファイルした情報をロードすることができます。
-
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', ));