2009年7月30日木曜日

 

【symfony】日本語メールを送信するためプラグイン - jpSimpleMailPlugin(※追記:2009/08/01)

どの方法が標準的なのか判らなかったので、日本人が日本語メール送れるように「jpMailPlugin」を踏まえて開発されたプラグイン「jpSimpleMailPlugin」を選択。

ソース

jpSimpleMailPlugin - openpear

インストール

/* インストール・コマンド */
$ ./symfony plugin:add-channel openpear.org // channel 登録
>> plugin    add channel "openpear.org"
$ ./symfony plugin:install --force-license --release=0.1.1 openpear.org/jpSimpleMailPlugin
>> plugin    installing plugin "openpear.org/jpSimpleMailPlugin"

問題なくインストールできた。

※追記:2009/08/01

symfony」コマンドでは取得できなかったので「svn」で取得。

jpSimpleMailPluginで簡単Eメール送信の巻 - tic-toc.info

「plugins/」ディレクトリで以下実行。

$ svn co http://svn.openpear.org/jpSimpleMailPlugin/tags/0.1.1-beta jpSimpleMailPlugin

symfony1.2では「sfMail」というクラスが無くなり、「PHPMail」がデフォルトで使えない上に、「setting.yml」に「compat_10: on」にしないとActionから「sendEmail()」が使えない様なので()、この際「Qdmail」を使ってみる。

Qdmail - さぼてん:2009年8月3日

とりあえず呼び出すActionファイルと同じ「actions/」に置いてインクルード。

/* apps/frontend/modules/sendmail/actions/actions.class.php */

include('qdmail.php');
public function executeIndex(sfWebRequest $request) {
  try {
    $mailer = jpSimpleMail::create('Qdmail');

    $mailer->setSubject('メール送信テストです');
    $mailer->setSender('master@example.com');
    $mailer->addTo(sprintf('%s <%s>', 'シンフォニー 太郎', 'symfony@example.com'));
    $mailer->setFrom(sprintf('%s <%s>', '管理者', 'master@example.com'));
    // getComponentでsendmailモジュールのcreateMailBodyコンポーネントに値(name)を渡しつつ処理結果をsetBodyする
    $mailer->setBody($this->getComponent('sendmail', 'createMailBody', array('name' => 'なまえ')));
    $rs = $mailer->send();
  } catch (jpSendMailException $e) {
    // エラーの場合の処理
  }
}

コンポーネント。「actions/」ディレクトリに作成。

/* apps/frontend/modules/sendmail/actions/components.class.php */

<?php class sendmailComponents extends sfComponents {
  public function executeCreateMailBody($request) {
    // ここで本文を作成するのに必要なロジックをコーディングする
    $this->url = "http://www.example.com/";
  }
}

メール本文のテンプレート。

/* apps/frontend/modules/sendmail/templates/_createMailBody.php */
<?php echo $name ?>
 ------------------
 テストです。
 どうでしょうか?
<?php echo $url ?>
 -----

「qdmail.php」はどこに配置するのが良いのか。
コンポーネントにはどんな処理を担当させれば良いのか。

参考

jpSimpleMailPlugin - おやぢ組

関連

メールを送るとなぜかOutlook系のメーラーでサブジェクトが文字化ける件 - 30歳の遺書
jpSimpleMailPluginというプラグイン~(中略)~早速インストールしてみたんだけど、まだ文字化けが続く。
メールのヘッダを見ると、どうやらエンコーディングを二回やってしまっているらしい。
メール送信 - さぼてん(2009/07/27)

ラベル:


 

【symfony】サンプルサイト - TinyURL

symfonyでTinyURLを作ってみた - おっと萌えキャラの悪口はそこまでだ

ソースが全て公開している、デモサイトもある。

どんどん開発例が増えていくと良いよね。

ラベル:


 

【symfony】_csrf_tokenとsetWidgets()

嵌ったので記録。

フォームでカラム「user_id」を「setWidgets()」で「hidden」にした。

/* lib/form/doctrine/MyModuleForm.class.php 修正前 */
class MyModuleForm extends MyModuleForm
{
  public function configure()
  {
    $this->setWidgets(array(
      'user_id' => new sfWidgetFormInputHidden(),
      'name' => new sfWidgetFormInput(),
      'email' => new sfWidgetFormInput(),
    ));
    ~(略)~
   }
}

そしたらフォームの値が上手く渡らなくなった。空っぽ。「$request」にはあるのに「$form」に渡ってない、validationで全部「Required」エラー。CSRFトークンまでエラーが出た。
Actionの書き方が悪いのか「processForm()」か、テンプレートか「routing.yml」かとあれこれ四苦八苦。
次の様に修正。

/* lib/form/doctrine/MyModuleForm.class.php 修正後 */
class MyModuleForm extends MyModuleForm
{
  public function configure()
  {
    $this->widgetSchema['user_id'] = new sfWidgetFormInputHidden();
    $this->widgetSchema['name'] = new sfWidgetFormInput();
    $this->widgetSchema['email'] = new sfWidgetFormInput();

    ~(略)~
   }
}

setWidgets()」に記述してないフォームはリセットされるからだと思う。
setWidgets()」でフォーム要素のWidgetを定義がないカラムは、フォーム画面で存在しないので気付くのだが、CSRFトークンは「<input name="my_module[_csrf_token]" type="hidden" >」としてあったのでこのような事態に陥ってしまった。
自動の便利なヘルパーに足元を掬われた様な。

ラベル:


2009年7月27日月曜日

 

【symfony】メール送信

Qdmail

Symfonyで日本語メール送信(携帯デコメもOK) - PHP::Mail Library , Quick and Detailed for Multibyte

携帯デコメ、添付ファイル、HTMLメールが簡単に扱えるQdmailの使い方。
symfony 1.1.3から対応。

sfMailView

スマートなメールの送りかた - symfonyで開発日記

symfonyのアプリケーションからメールを送信する時、本文をテンプレートに書くsfMailViewの使い方と、メールアプリケーションのテストに便利なsfEmailプラグイン。
sfEmailプラグインを使うと、prod環境以外ではメールを送らずウェブの画面で送信したメールを確認する事ができる

jpMailPlugin

symfonyのjpMailPlugin(メール送信プラグイン)の使い方のまとめ - アシアルブログ
jpMailPluginをsymfony1.1以降で使う場合 - ぷぎがぽぎ

1.1以降で使うための作業。
※簡単に使えるように開発したのがjpMailPlugin

jpMailPlugin

jpSimpleMailPlugin - openpear
jpSimpleMailPluginリリース - ぷぎがぽぎ

PHPMailer, Swift Mailer, Qdmailで簡単に日本語メールを送るためのプラグイン。

ラベル:


This page is powered by Blogger. Isn't yours?

登録 投稿 [Atom]

Google