symfonyのアプリケーションからメールを送信する時本文をテンプレートに書くsfMailViewの使い方と、メールアプリケーションのテストに便利なsfEmailプラグインを紹介します。
sfMailViewを使って本文をテンプレートに書く
下記のようにアクションの中に直接メールの本文を書いてしまうと見栄えが悪くなってしまいませんか?
public function executeSend() { /** *メールを送信 */ $mail = new sfMail(); $mail->initialize(); $mail->setMailer('sendmail'); $mail->setCharset('utf-8'); // definition of the required parameters $mail->setSender("sender@example.com"); $mail->setFrom("from@example.com"); $mail->addReplyTo("replyto@example.com"); $mail->addAddress(); $mail->setSubject("メールですよ"); $mail->setBody( time(). " ここに長いメールの本文をだらだらと書くとコードが見にくくなっていやですよね。 というか、メールの本文はプレゼンテーションパートとしてビューにすべきです。 sfMailViewはsymfonyの基本だとおもっていましたが、 社内でも知らない人がいてびっくりしましたよ本当に。 " ); $mail->send(); $this->forward('page', 'show'); }
symfonyでは、メールの送信内容をビューで実現するsfMailViewがあります。使いかたは簡単で上記のコードを下記のように直します。
public function executeSend() { //既に組み込まれている、sfComponent::sendEmail()を利用します。 $this->sendEmail("mymodule","mail"); } public function executeMail() { $this->mail = new sfMail(); $this->mail->initialize(); $this->mail->setMailer('sendmail'); $this->mail->setCharset('utf-8'); // definition of the required parameters $this->mail->setSender("sender@example.com"); $this->mail->setFrom("from@example.com"); $this->mail->addReplyTo("replyto@example.com"); $this->mail->addAddress("to@example.com"); $this->mail->setSubject("メールですよ"); }
本文は、下記のようにテンプレートtemplates/mailSuccess.php書きます。
<?php echo time() ?> ここに長いメールの本文をだらだらと書くとコードが見にくくなっていやですよね。 というか、メールの本文はプレゼンテーションパートとしてビューにすべきです。 sfMailViewはsymfonyの基本だとおもっていましたが、 社内でも知らない人がいてびっくりしましたよ本当に。
sfEmailを使ってテストを簡単にする
メールを送るアプリケーションの作成のために何通もメールを送っているとメールボックスが大変な事になります。
sfEmailプラグインはsfMailを継承しているクラスを実装しています。sfEmailプラグインを使うと、prod環境以外ではメールを送らずウェブの画面で送信したメールを確認する事ができるのでとても便利です。
インストール
symfony plugin-install http://plugins.symfony-project.com/sfEmailPlugin symfony cc
バックエンドアプリケーションからメールを確認するため下記のようにsettings.ymlに設定する。
all:
.settings:
enabled_modules: [ default, sfEmail ]以上の設定で、http://www.example.com/backend.php/sfEmailのアドレスで送信したつもりのメールをブラウザから確認することができます。
下記のように送ったメールが一覧で表示されます。
メールをクリックすると本文が表示されます。
コーディング
sfMailの部分を単にsfEmailに変更するだけです。前の例だと下のようになります。
public function executeMail() { $this->mail = new sfEmail(); 以下同じ
簡単ですね。 これ以外の情報は、本家のsfEmailPluginのwikiを御覧ください。
sfEmailを今日初めて知りました。symfony1.0でプラグインの自由度が上がってからどんどん新しいプラグインが提供されていてます。symfonyでのプログラミングがますます楽しくなっていきますね。


失敗しました(TT)
C:\proj1>symfony plugin-install http://plugins.symfony-project.com/sfEmailPlugin
[Exception] install failed
有益な情報いつもありがとうございます。 いつも参考にさせていただいております。