ようこそゲストさん

CPA-LABテクニカル

2008/07/02(水) CakePHP(RC1.2)のemailコンポーネントで日本語はまだ厳しい

はてブ情報 はてブに登録 はてブ数 cakephpspok

CakePHP(1.2RC2)のemailコンポーネント評価

CakePHP 1.2 RC2 がリリースされたので、新しいemailコンポーネントを評価してみた。全般的に言えば、改行コード&英文周りはかなり改善されており、英語メールを送る分には、大丈夫かと思う。
しかし、一部でマルチバイト非対応となっており、日本語の場合、若干の問題点がある。
  1. Content-Transfer-Encoding:ヘッダーは7bit固定&charsetはutf-8なので、charsetをiso-2022-jpに変更し、本文、ビュー、レイアウトのすべてを自前でiso-2022-jpに変換する必要がある。*1
  2. ワードラップ処理がマルチバイト非対応
    __wrapメソッドがマルチバイト非対応なので、文字化けする可能性が大きい。また、「日本語文字列のバイト数取得にstrlenだけではダメな理由-PHP」でも述べたとおり、マルチバイト環境では、文字列のバイト数を得るのに、strlenだけを使うのは、問題がある。
  3. MIMEエンコードが、マルチバイト文字の途中で強制改行される可能性のあるスクリプトとなっており、長いsubject&Gmailやbeckeyでタイトルが文字化けする可能性が大きい。*2
  4. qmail用がデフォルト?
    mail関数で送る際には、MTAがqmailであればLF,qmail以外のsendmailやPostFixであれば、CRLFである必要があるが、LFがデフォルトとなっている。
    これはこれで賢いやり方で、CRLFをデフォルトにするとqmailの時にエラーがでるけれど、LFがデフォルトであれば、sendmailやPostFixがエラーを出すことはないだろうからだ。
  5. SMTP送信の場合、 名前<address@example.com> の形式が使えず、<address@example.com> というメールアドレスのみのヘッダーとなる。
    う~ん。どうしてこうしたのでしょうかね。

その他の制約

  • 本文base64エンコードできない。
  • Quoted-Printable非対応
  • デコメ送信不可能*3
  • MHTL(インラインHTML)メール不可
  • 添付ファイルの日本語不可

全般的な感想

相当がんばれば、デフォルトでも日本語は送れないことはないと思うけど、メールひとつ送るのに、がんばりたくないでしょ。

う~ん。mb_send_mail単体のほうがましかな。

Qdmailなら。。。。

高機能マルチバイトメールライブラリQdmailなら、CakePHPのコンポーネントとしても動作します。
上記のemailコンポーネントの弱点はすべて克服されておりますので、一度お試し下さい。

*1 : 7bitなのに、8bitコードのUTF-8をデフォルトにするのはよくないです。。。

*2 : 私もハマったところ

*3 : これは仕方ないよね


名前:  非公開コメント   

  • TB-URL  http://www.cpa-lab.com/tech/0141/tb/