メールの送信方法

メール送信は、ウェブアプリケーションを作る際のよくある困難なタスクです。機能を実装するのに、車輪の再発明をするのではなく、 SwiftMailer ライブラリを活用した SwiftmailerBundle を使用してメール送信機能を実装することができます。

Note

使用する前に、 SwiftmailerBundle バンドルを使用可能にしていることを確認してください。

public function registerBundles()
{
    $bundles = array(
        // ...
        new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
    );

    // ...
}

コンフィギュレーション

Swiftmailer を使用する前に、コンフィギュレーションをチェックしましょう。指定が必要なパラメータは、 transport だけです。 :

  • YAML
    # app/config/config.yml
    swiftmailer:
        transport:  smtp
        encryption: ssl
        auth_mode:  login
        host:       smtp.gmail.com
        username:   your_username
        password:   your_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="smtp"
        encryption="ssl"
        auth-mode="login"
        host="smtp.gmail.com"
        username="your_username"
        password="your_password" />
    
  • PHP
    // app/config/config.php
    $container->loadFromExtension('swiftmailer', array(
        'transport'  => "smtp",
        'encryption' => "ssl",
        'auth_mode'  => "login",
        'host'       => "smtp.gmail.com",
        'username'   => "your_username",
        'password'   => "your_password",
    ));
    

Swiftmailer コンフィギュレーションのほとんどは、メッセージの配送方法に関するものです。

次のコンフィギュレーションを指定することができます。 :

  • transport (smtp, mail, sendmail, or gmail)
  • username
  • password
  • host
  • port
  • encryption (tls, or ssl)
  • auth_mode (plain, login, or cram-md5)
  • spool
    • type (現在は file のみを指定えきますが、どうやってキューを行うかを指定します)
    • path (メッセージを格納する場所)
  • delivery_address (全てのメールを送るメールアドレス)
  • disable_delivery (配送の失敗を許容するには true を指定してください)

メールの送信

Swiftmailer ライブラリは、 Swift_Message オブジェクトを作成し、設定し、そして送信することで動作をします。 mailer は実際のメッセージの配送に対して責任を持って、 mailer サービスを介してアクセスが可能です。結果、メールの送信は素直な実装になります。

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(...);
}

疎な結合をするために、 メールの本文は、テンプレートに格納され、 renderView() メソッドで内容を作成しています。

$message オブジェクトは、添付ファイルや、 HTML コンテントを追加したりするなど、さらに多くのオプションをサポートします。幸運なことに Swiftmailer のドキュメントは充実しており、 Creating Message の章を参照して、詳細を調べることができます。

Tip

また、 Symfony2 でのメール送信に関する情報は、他のクックブックの記事も参考になります。 :

このページのコンテンツ

ソース