開発中におけるメール送信の扱い方 ================================ メールを送信するアプリケーションを開発している際に、開発中では、実際に受信者にメールを送信したくないときもあると思います。 Symfony2 の ``SwiftmailerBundle`` を使用すれば、コードの変更をすることなしに、コンフィギュレーションの設定を変更するだけで、この問題を簡単に解決することができます。開発中では、メール送信の処理に関して、主に2つの選択をすることができます。: (a) メール送信を無効にする (b) 特定のメールアドレスにメールを送信する メール送信を無効にする ---------------------- ``disable_delivery`` オプションを ``true`` に設定すればメール送信を無効にすることができます。 Symfony の Standard Distribution の ``test`` 環境では、デフォルトでメール送信を無効にしており、この設定になっています。 ``test`` 環境でこのようによう指定しているため、テストを実行する際にメールは送信されません。しかし、 ``prod`` や ``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", )); ``dev`` 環境でも送信を無効にしたい際には、 ``config_dev.yml`` ファイルに同じ設定を追加するだけです。 特定のメールアドレスに送信する ------------------------------ また、メッセージを送信する際に、実際に指定したメールアドレスではなく、全てのメールの送信先を特定のアドレスにすることもできます。 ``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", )); そして、次のように ``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(...); } ``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 を探すこともできます。プロファイラの検索機能を使えば、過去のリクエストを全てプロファイルした情報をロードすることができます。 .. configuration-block:: .. code-block:: yaml # app/config/config_dev.yml web_profiler: intercept_redirects: true .. code-block:: xml .. code-block:: php // app/config/config_dev.php $container->loadFromExtension('web_profiler', array( 'intercept_redirects' => 'true', )); .. 2011/12/27 ganchiku 91fd86acb06f8181da948e0439dca130806c5ccf