スマートなメールの送りかた

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でのプログラミングがますます楽しくなっていきますね。

One Response to “スマートなメールの送りかた”

1
isyairazu - 27/08/07

失敗しました(TT)

C:\proj1>symfony plugin-install http://plugins.symfony-project.com/sfEmailPlugin

dir+ C:\proj1\plugi...hannel.pear.symfony-project.com plugin installing plugin "http://plugi...fony-project.com/sfEmailPlugin" pear downloading sfEmailPlugin-1.0.0.tgz ... pear Starting to download sfEmailPlugin-1.0.0.tgz (3,432 bytes) pear ....done: 3,432 bytes pear Failed to download symfony/symfony (version >= 0.8.1, version pear <= 1.1.0, excluded versions: 1.1.0), latest release is version pear 1.0.6, stability "stable", use pear "channel://pear.symfony-project.com/symfony-1.0.6" to install pear symfony/sfEmailPlugin is not compatible with installed package pear "symfony/symfony" version 1.1.0 pear No valid packages found

[Exception] install failed

有益な情報いつもありがとうございます。 いつも参考にさせていただいております。

Leave a Reply

You must be logged in to post a comment.