SwiftMailerでメール送信(gmail)

添付ファイルのメールを送信しています。

      $message = $this->getMailer()->compose(
        'from@example.com',
        'to@example.com',
        'Subject is here.',
        'Body is here.'
      )->attach(
            Swift_Attachment::fromPath('/var/www/tmp/image.jpg')
      );
      $this->getMailer()->send($message);

いっぺんにセンドしてしまうこともできます。

      $message = $this->getMailer()->composeAndSend(
        'from@example.com',
        'to@example.com',
        'Subject is here.',
        'Body is here.'
      )->attach(
            Swift_Attachment::fromPath('/var/www/tmp/image.jpg')
      );

gmailで送るには/apps/frontend/config/factories.ymlに設定します。

dev:
  mailer:
    param:
      transport:
        class: Swift_SmtpTransport
        param:
          host: smtp.gmail.com
          port: 465
          encryption: ssl
          username: username
          password: password

gmailsmtpコネクションに多少時間がかかります。symfonyphpエンジンが遅いわけではないと思います。exim4のスマートホスト・sendmailで送るといいでしょう。

日本語のメールは上記では化けてしまうので(タイトル・本文) 文字化けしないように色々と自分で実装できるのですが、色々とややこしいのでkzl_Jp_Swift_Messageをお借りします。
http://www.kuzilla.co.jp/article.php/20100301symfony

PluginはDownloadしてplugins Directoryで解凍し
/config/ProjectConfiguration.class.phpのpublic function setup()内に下記の一行を追加します。

$this->enablePlugins('kzlJpSwiftMailerPlugin');

メールを送信する手順は下記のとおりです。

$message = kzl_Jp_Swift_Message::newInstance();
$message->setFrom('from@example.com');
$message->setTo('to@example.com');
$message->setSubject('日本語のタイトルでも大丈夫です');
$message->setBody('日本語の本文です。');
$message->attach(
    Swift_Attachment::fromPath('/var/www/tmp/image.jpg')
);
$this->getMailer()->send($message);

jpMailPluginを使う方法もありますがkzl_Jp_Swift_Messageがたぶん一番楽ちんです。ちょっと名前が長いので覚えられないな。kzl... 自分で実装するとなるとタイトルのエンコードが多少ややこしいです。いつか自分用ライブラリ書くことにする。