続・QdmailをCakePHPで使う

以前gistで公開したQdmailerコンポーネントですが、その後もいろいろ手を加えたい部分が出てきたので、正式にgithubにリポジトリを作成しました。

http://github.com/tkyk/cakephp-qdmailer

使い方はREADMEを読んでください。

本家QdmailComponentとの違いは次の通りです。[*]印はgist版からの変更点になります。

  • View クラスの読み込み方法が EmailComponent と同一になっている(そのためThemeView やプラグインが提供するViewも使用可能)
  • テンプレートファイルのエンコーディングが指定されなかった場合、自動判定するのでは無く App.encoding の値を使う
  • CakePHPのConfigure::read(‘debug’)が0のとき、デフォルトでエラーメッセージを表示しない
  • [*]Configure::writeによるグローバルな設定が可能
  • [*]実行時にis_qmailの設定が可能
  • [*]ログの保存先がデフォルトでLOGSになる(オリジナル版ではCOMPONENTS)
  • [*]Qdsmtp使用時に、qdmail.phpをvendorsディレクトリに置くことができる
  • [*]Qdsmtp使用時に、ログの保存先設定が引き継がれる
  • [*]Qdsmtp使用時に、エラーメッセージ表示可否の設定が引き継がれる

is_qmailの設定は非常に重要なので補足しておきます。Qdmailはデフォルトでは「qmailを使っているか否か」をコンストラクタの中で自動判定しようとします。このときシェル経由(system関数)でsendmailコマンドを(qmailでしか使えないオプションを指定して)実行するため、相応の負荷がかかる上に、qmail以外のMTAを使用している場合はmaillogにエラーメッセージが記録されてしまいます。今のところ(qdmail-1.2.6b)この自動判定を実行時に止める方法はありません。そしてCakePHPのコンポーネントとして使う場合はさらに悲惨で、判定がコンストラクタで行われる以上、たとえメールを送らなくても、コンポーネントを読み込むだけで自動判定が実行されてしまいます。

ということで、is_qmailの設定は絶対に明示的に行ってください。具体的にはbootstrap.phpの中でConfigure::writeを使って行います。

Configure::write('Qdmailer',
                 array('is_qmail' => false,
                          /* ... その他の設定 ... */));

なおこのis_qmailの件も含めて作者spokさんには連絡してあるので、いずれ本体側で何らかの変更が行われるかも知れません。

One Response

  1. [...] 2009-11-15 更新: さらに改良したものをリポジトリで公開しました。続・QdmailをCakePHPで使うを参照してください。 [...]

Leave a Reply