symfonyのjpMailPlugin(メール送信プラグイン)の使い方のまとめ
皆さん、こんにちは。
この季節になると鼻がムズムズする季節外れの花粉症持ちの笹亀です。
symfonyでメールを送信する場合、sfMailクラスが標準で実装されていますが、
それだけですと、日本語でのメール送信する場合は非常に苦労します。
今回は、いろいろ試行錯誤しながらたどり着いたjpMailPluginの使い方について
自分のメモの意味も含めて、まとめてみたいと思います。
まずは、プラグインのインストール方法です。(いまさら必要ないかもしれませんがw
プラグインのインストールは、簡単ですねw
まずは基本的な使い方で、メールを送りたいアクションに日本語メールを送るような処理を加える方法です。
下記の例は、HTMLメールとテキストメールを同時に送信する方法です。
覚えておくと便利なメソッドと便利な使い方のご紹介です。
個人的に頻繁に使ったメソッドです。
次に、テンプレートを本文として使用する方法もあります。
テンプレートを使用してメール送信するということはメール送信をそれぞれのアクション内で定義するのではなく、ひとつのアクションにまとめることで実装後の管理をしやすくすることができます。こちらは、おやぢ組さんのページで詳しく解説されておりますので、こちらを参照ください。
上記サイトに記載されている「flash変数を使用した制御」なども大変便利な使い方です。
メールのテンプレートもsetTemplateでテンプレートを指定することで、ひとつの箇所にまとめておくと、テンプレートの修正も容易に行えます。
下記のように、会員登録後のメール送信やその他のメール送信のテンプレートをまとめることで一括管理することができます。
このようにjpMailPluginは便利な使い方がたくさんあります。
どのようなときでもそうですが、メールを送る処理などは実装後のメンテナンスのことを考えると、このようにまとめられる所はまとめておくのがベストでしょう。どの言語でも必ず1度はハマってしまうのがメール関連の問題です。symfonyでのメール送信の情報としてお役にたてれば幸いです。
最後に「jpMailPlugin」を使用する際に注意があります。
私がご紹介したプラグインを使用しているときにですが、「$mail->setSubject()」で日本語で長いタイトルをセットしてメールを送信をすると、下記のようにタイトル内に「¥n」が付加されてしまう問題が起こりました。
「メール送信テストテスト\nテストテスト」
プラグインの中身を見てデバックをしてみましたが、mb_encode_mimeheader部分でバグが起きているみたいです。
52行目の変換で「\n」を「'」でくくっています。これが悪さをしているみたいです。
このくくりを「"」のくくりに修正するとメールのタイトルのバグは解消できます。
ご使用の際には上記についてお気をつけ下さい。
※現在の最新バージョン0.0.3では、上記のバグについてご対応いただけております。
brtriver様、誠にありがとうございました。
この季節になると鼻がムズムズする季節外れの花粉症持ちの笹亀です。
symfonyでメールを送信する場合、sfMailクラスが標準で実装されていますが、
それだけですと、日本語でのメール送信する場合は非常に苦労します。
今回は、いろいろ試行錯誤しながらたどり着いたjpMailPluginの使い方について
自分のメモの意味も含めて、まとめてみたいと思います。
まずは、プラグインのインストール方法です。(いまさら必要ないかもしれませんがw
- symfony
plugin-install http://develop.ddo.jp/symfony/jpMailPlugin-0.0.2.tgz
プラグインのインストールは、簡単ですねw
まずは基本的な使い方で、メールを送りたいアクションに日本語メールを送るような処理を加える方法です。
- public
function executeRegist() { - ----
- ----その他の処理
- ----
- //メールを送信する処理
mb_internal_encoding("UTF-8"); # UTF-8の場合 $mail = new jpMail(); $mail->setFrom($from); # From: $mail->setSender($returnpath); # Return-Path: $mail->addReplyTo($replyto); # Reply-to: $mail->setSubject('メール送信タイトルをセットする'); $mail->setBody('メールの本文をここにセットします'); $mail->addAddress($to); # To $mail->addAddress($to1); # Toは複数のアドレスをセットできます $mail->send(); - ----
- ----その他の処理
- ----
- }
下記の例は、HTMLメールとテキストメールを同時に送信する方法です。
- mb_internal_encoding("UTF-8");
# UTF-8の場合 $mail = new jpMail(); $mail->setFrom($from); # From: $mail->setSender($returnpath); # Return-Path: $mail->addReplyTo($replyto); # Reply-to: $mail->setSubject('メール送信タイトルをセットする'); $mail->setContentType('text/html'); $mail->setBody('<h3>メールの本文をここにセットします</h3>'); $mail->setContentType('text/plain'); $mail->setAltBody('メールの本文をここにセットします'); $mail->addAddress($to); # To $mail->send();
覚えておくと便利なメソッドと便利な使い方のご紹介です。
個人的に頻繁に使ったメソッドです。
- $mail->addCc($cc);
- $mail->addBcc($bcc);
次に、テンプレートを本文として使用する方法もあります。
テンプレートを使用してメール送信するということはメール送信をそれぞれのアクション内で定義するのではなく、ひとつのアクションにまとめることで実装後の管理をしやすくすることができます。こちらは、おやぢ組さんのページで詳しく解説されておりますので、こちらを参照ください。
上記サイトに記載されている「flash変数を使用した制御」なども大変便利な使い方です。
メールのテンプレートもsetTemplateでテンプレートを指定することで、ひとつの箇所にまとめておくと、テンプレートの修正も容易に行えます。
下記のように、会員登録後のメール送信やその他のメール送信のテンプレートをまとめることで一括管理することができます。
- class
memberActions extends sfActions { executeMemberRegist() { ---- ----その他の処理 ---- //会員のオブジェクトをFlash変数にセットして、メール送信アクションを呼び出す $this->setFlash('member', $this->member); $raw_email = $this->getPresentationFor('mail', 'memberRegist', 'jpMail'); ---- ----その他の処理 ---- } executeMemberUnsub() { ---- ----その他の処理 ---- //会員のオブジェクトをFlash変数にセットして、メール送信アクションを呼び出す $this->setFlash('member', $this->member); $raw_email = $this->getPresentationFor('mail', 'memberUnsub', 'jpMail'); ---- ----その他の処理 ---- } - }
- class
mailActions extends sfActions - {
//会員登録の場合のメール処理 public function executememberRegist() { //メンバーオブジェクトを取得する $member = $this->getFlash('member'); $this->forward404Unless($member); $this->member = $member; mb_internal_encoding('UTF-8'); $mail = new jpMail(); $mail->setFrom($from); $mail->setSender($replyto); $mail->addReplyTo($returnpath); $mail->addAddress($member->getEmail()); $mail->setSubject($member_title); $this->mail = $mail; $this->setFlash('member', null); //会員登録用のテンプレートを呼び出す $this->setTemplate(’’<プロジェクトルート>/libs/mailtemplates/memberRegistSuccess.class.php'); } //会員退会の場合のメール処理 public function executememberUnsub() { //メンバーオブジェクトを取得する $member = $this->getFlash('member'); $this->forward404Unless($member); $this->member = $member; mb_internal_encoding('UTF-8'); $mail = new jpMail(); $mail->setFrom($from); $mail->setSender($replyto); $mail->addReplyTo($returnpath); $mail->addAddress($member->getEmail()); $mail->setSubject($member_title); $this->mail = $mail; $this->setFlash('member', null); //退会用のテンプレートを呼び出す $this->setTemplate(’’<プロジェクトルート>/libs/mailtemplates/memberUnsubSuccess.class.php'); } - }
このようにjpMailPluginは便利な使い方がたくさんあります。
どのようなときでもそうですが、メールを送る処理などは実装後のメンテナンスのことを考えると、このようにまとめられる所はまとめておくのがベストでしょう。どの言語でも必ず1度はハマってしまうのがメール関連の問題です。symfonyでのメール送信の情報としてお役にたてれば幸いです。
最後に「jpMailPlugin」を使用する際に注意があります。
私がご紹介したプラグインを使用しているときにですが、「$mail->setSubject()」で日本語で長いタイトルをセットしてメールを送信をすると、下記のようにタイトル内に「¥n」が付加されてしまう問題が起こりました。
「メール送信テストテスト\nテストテスト」
プラグインの中身を見てデバックをしてみましたが、mb_encode_mimeheader部分でバグが起きているみたいです。
52行目の変換で「\n」を「'」でくくっています。これが悪さをしているみたいです。
- return
mb_encode_mimeheader($value, $this->getCharset(), 'B', '\n');
このくくりを「"」のくくりに修正するとメールのタイトルのバグは解消できます。
- return
mb_encode_mimeheader($value, $this->getCharset(), 'B', "\n");
ご使用の際には上記についてお気をつけ下さい。
※現在の最新バージョン0.0.3では、上記のバグについてご対応いただけております。
brtriver様、誠にありがとうございました。
コメント
コメントフォーム
トラックバック
-
- Simfonyで日本語メール送信 from CPA-LABテクニカル
- QdmailがSymfony対応となりました。Symfonyで日本語メールbyQdmail今回、初めて...
2008年09月30日 07:01
最近の記事
- もうすぐ健康診断があるんだ・・・ [2010年09月02日 : 阿部恵]
- Photoshopで壁紙を作りながら、基本的な使い方を覚える [2010年09月01日 : 鴨田健次]
- はじめての共同作業 Canvas編 (node.js + websocket) [2010年09月01日 : 中川善樹]
- 「PHP×Flex(後編)」PHPテクニカルセミナー(無料)第4弾の募集を開始しました!! [2010年08月26日 : 和田記光]
- 【HTML5】Canvasでお絵かきしてみた(前編) [2010年08月25日 : 橋本章史]
- MacにgroongaのMySQL用ストレージエンジン [2010年08月23日 : 笹亀弘]
- Appleのサイトで見たiPhone4をFireworksで描いてみました-1/2 [2010年08月19日 : 和田記光]
- iPad版の会社紹介を作ってみました [2010年08月19日 : 小林有佳]
- iPhoneアプリ開発開始時に気をつけるべきファイルの取り扱い (2) [2010年08月19日 : 亀本大地]
- symfonyセミナー動画無料公開! [2010年08月13日 : 岡本雄樹]



ご指摘ありがとうございました!
プラグインでいつも使用させていただいております。
こちらこそ、わざわざご対応していただきありがとうございました^^
sfMailもなんだか挙動が変で、setFromがうまくいかなかったりします。
1.1以降ではCookBookにあるようにSwiftMailerを使うのがよいと思います。
http://www.symfony-project.org/cookbook/1_1/en/email
symfony1.1では1.0との変更点などを算出して実装しないと、
動作しないということですね。
symfony1.1での実装のときは、SwiftMailerを試させていただきます^^
機会があれば、その内容もblogに掲載できればと思います。
貴重なご意見ありがとうございました。
pMailPlugin を利用す場合、特に設定で、気をつけることはありますか?
コメントありがとうございます。
返答が遅れてしまい、申し訳ございませんでした。
私は、postfixを使ってjpMailPluginを利用させていただいております。
smtpを使用していれば、とくにqmailをお使いでも設定などで気をつけないといけない箇所はないとおもいます。
強いていうならば、localhost.localdomain以外のドメインやホストのsmtpを使用する場合には、mailer.ymlの設定ファイルの情報を変更しなければなりませんので、ご注意ください。