▼ 2008/04/17(木) PHP日本語高機能メールライブラリ-Qdmail-デコメ対応-文字化けフリー
■Qdmailとは
Qdmailとは、PHPのマルチバイト環境(特に日本語)にて、「文字化けしない」「簡単に"デコメ"(デコメール)やHTMLメール等の電子メールを送信することができる」メールクラスライブラリです。(PHP4,PHP5の両方対応)「初心者には簡単に、上級者には多彩に」のポリシーのもとに開発しました。
設定次第では、日本語だけでなく各国語対応ができる(はず)。
PHPには、"mb_send_mail"というメール関数もありますが、残念ながら、機能が限定的です。多くのマルチバイト圏言語の人々は、自国語でメールを送ることに、かなり苦労しているようです。
Qdmial-PHP日本語マルチバイトメールクラスライブラリ(別サイトです。)
参考:携帯4社デコメ・マルチパート比較
開発の背景
mb_send_mail
PHPには、mb_send_mail というマルチバイト用のメール関数がありますが、使い勝手が悪く、利用している人は少数かと思います。かといって、Pear::Mailは仰々しいし、自分で英語圏用mail関数を使いこなすのも面倒だ。。。特に、ヘッダーのMIMEエンコード処理は間違いがちで、知らず知らずのうちに文字化けメールを送っていることも。。。。
CakePHPでの経験
CakePHPで遊んでいるうちに、CakePHP1.2ベータのe-mailコンポーネントに出会いました。しかし、これもマルチバイトに弱く、文字化け多発です。しょうがないので、自分でe-mailコンポーネントを改良し、Semailというものを作りました。
しかし、もともとのe-mailコンポーネントの実装が柔軟性に欠ける感じだったので、限界がありました。
また、当然のことですが、CakePHPのコンポーネントであるため、CakePHPを使うまでもない時や、ちょこっと日本語メールを送りたい時には、不便です。
そこで一般的なWEBアプリケーションでも使えるような、本当のmb_send_mailが欲しいな、と思っていました。
現在のQdmailは、そのままではCakePHPのコンポーネントとしては動作しませんが、コントローラーの中でインクルードして、viewの出力を突っ込めば、使えるはずです。それはCakePHPのみならず、他のフレームワークでも同じです。
簡単にメールを送りたい
そもそもメール機能なんて、「使う側からみれば」、当たり前の機能なのに、なんでこんなに大変な思いをしなければならないのか。(技術的にはいろいろあって大変なのはわかるけど)
携帯にデコメを送りたい
ふと携帯にデコメを送るには、を調べていると、インラインHTMLメールというものの存在を知りました。恥ずかしながら、それまでよく知りませんでした。調べると、htmlとmhtlのあいのこのようなもので、なかなかおもしろい構造でした。
しかし、Semailではもう限界であり、新たなメールクラスライブラリを作ろうと思い立ったのです。
まあしかし
どこまで需要があるのかわかりませんが、一応、手間はむちゃくちゃかかった
コアの部分は、2日間の休みをつぶして、すぐにできたのですが、ユーザーインターフェイスで苦しみました。コードの半分は、ユーザーインターフェイスです。かつての私のように、オブジェクト指向って何?の状態の人でも使えるようにするためには、どうすればいいのか、という点に悩みました。
ファイル1個にこだわった。
Pearもそうですが、初心者にとって、たくさんのファイルを適切な場所に配置し、適切にインクルードして使うのは、結構たいへんです。なので、「ファイルは1個だけ」、ということにこだわりました。
これは上級者にとってみても、手間がかからない、という点で利点だと思っています。
コードが2000行を超え、決してスマートではありませんが、これからもできるだけファイル1個に納めたいです。
PHP4対応は異常に大変
当初PHP5でコードを書いていたせいもあるのですが、PHP5のオブジェクト指向的書き方に慣れてしまうと、もうPHP4には戻りたくありません。途中からPHP4にして開発しましたが、「あ、これもダメなんだっけ。あれもダメなんだっけ。」とイライラがつのるばかり。
しかし、未だPHP5に切り替わっていないレンタルサーバーもあるようなので、ふんばってみました。PHP5だけの対応なら、コードの量は、2/3になっていたでしょう。
個人的に気に入っているのは。
デコメ対応と、インテリジェントワードラップ、simpleReplace*1です。おいおい、あちらのサイトで説明を書いていこうと思います。(その前に、バグ出まくりだったりして。)
あと、送信ログ、エラーログ機能もあるので、万が一、外部からスパムなどに使われても、ログをチェックすれば、すぐにわかるようになっています。
本業が繁忙期に入っており、今後、どこまで使い方の説明やら、保守ができるかどうかわかりませんが。。。。
*1 : 簡易テンプレート機能
■Qdmailの特徴(機能)Feature
- PHPの対応バージョン
- PHP4,PHP5の両方に対応
- 簡単にできること
- 日本語メール(日本語本文、日本語ヘッダー)
- 日本語以外のマルチバイト各国語メール
- 添付ファイル(日本語添付ファイル名OK)
- 携帯デコレーションメール対応(携帯4社自動判別対応。たぶん)(日本のみ)
- インテリジェント・ワードラップ(http://の列は、折り返しをしない等が指定できる)(文字数でなく、文字幅での折り返しも可能。英数字と日本語が混ざっても綺麗!)
- 簡易テンプレート機能(名前やアドレス等の置き換えが可能)
- オブジェクト指向がわからなくても、関数ライクに各種設定可能(配列地獄形式)
- 自動でやってくれること
- 文字コード判別
- MIME判定
- HTMLメール時の代替テキスト文生成機能
- 様々な指定省略時のデフォルト設定
- 多彩にできること
- 宛先分離機能(複数宛先に1通づつ送付する機能)
- 複雑なMIMEタイプ指定
- 複雑なマルチパート構成
- 複雑なワードラップ
- 多彩な指定方法
- 常に管理者にBCC可能
- iso-2022-jp以外にも、utf-8,Shift-JIS等の文字セット可能
- ヘッダー、本文、添付ファイルの文字コードをそれぞれ別に指定可能
- 本文base64エンコードの指定可能
- 本文Quoted-printableエンコード指定可能
- 送信ログ、エラーログ作成機能
- 不具合時のデバッグログ作成機能
- 新たな方式のデコメ対応機種がでても簡単に追加可能
- 独自のメールアドレスチェック(バリデーション)関数を指定可能
- デコメ、インラインHTMLメール時のContent-Idを任意に指定可能
- sendmailへのオプション渡し可能
- デフォルト設定(変更可能です)
項目 | 設定値 |
文字コード | iso-2022-jp(jis) |
エンコード | 7bitノーマル |
自動MIME判定 | ON |
インテリジェントワードラップ | ON |
簡易テンプレート機能 | OFF |
宛先分離機能 | OFF |
HTMLメール時の代替テキスト文生成 | ON |
デコメ自動判定 | ON |
- 今後の課題
- SMTP送信
- CakePHP対応
- デコメ・テンプレート解析機能
- PGP対応
▼ コメント(0件)
- TB-URL http://cpa-lab.com/tech/0127/tb/
-
▼
デコメ。auのContent-IDの制約。@はひとつだけ。
CPA-LABテクニカル ■デコメはどうやって、画像を特定するのか通常のhtmlメールで例えばgif画像を指定するには、次のようにする。<img src="http://example.com/hoge/images/filename.gif">このファイル名でどの画像...
-
▼
弘法もメールの誤り?
CPA-LABテクニカル とある、逆引き~PHPをWEBで発売している会社さんから、改訂版のお知らせが届いた。~がバージョンアップいたしましたので、ご連絡申し上げます。最新版は下記 URL よりダウンロードください。http://www.example.com/hogehoge/数...