ようこそゲストさん

CPA-LABテクニカル

2008/10/12(日) ただ簡単にメールを送りたいだけだったのにPHP

PHPで簡単にメールを送りたいだけなのに。から、半年。
次回のメジャーバージョンアップは、絵文字ですが、本業が忙しく、しばらく後になりそうです。

それ以外は機能拡張の予定もなくなってきました。後は安定性の向上です。

日本語高機能PHPライブラリQdmailはそれなりに進化しました。
当初は、日本語を簡単に扱いたいという点からはじまり、途中からCakePHP対応、デコメ対応、そして電子署名。

動機は単純でした。
あるサイトのメールフォームに打ち込んでもらったメールアドレスに、添付ファイルを送信する、というサービスを作るのに、なんと苦労したことか。
mail関数、mb_send_mail関数も、デフォルトでは役に立たず、Pear::Mailは、メールの内部構造(マルチパート構成)をきちんと理解しなければ使いこなせず。。。。
ただ、日本語で添付ファイルを送りたいだけなのに。文字コードなんて気にせずに。
それをかなえるための努力は日曜プログラマにしては、相当困難な道のりでした。
まずは、マルチパートの理解、文字コードの理解(特に改行コード!)、SMTPの理解、各種RFCの理解、MTAの実装の理解(未だ足りない)、各種メーラーの実装の把握、プログラミングテクニックにおけるセキュリティの問題、効率的コードの問題、メンテナンス性の髙コードの構築、利用されるOSの理解、PHP4とPHP5の違い、PHPフレームワークの理解

それらでもうまくいかず、多くの方からフィードバック、エラー報告などをいただきました。
一部はまだ未解決ですが、それなりに他のPHPメールライブラリよりも、「文字化けしない」「簡単」という点は、ライバルを大きく引き離したのではないかと自負しています。

Qdmailマルチパートエンジン(再帰的マルチパート処理)

Qdmailでは、複雑なマルチパートを再帰的に処理しています。もっとも複雑な何通りかのマルチパート雛型を用意しておき、簡単なメールを送る場合でも、いったん複雑なマルチパートを作り上げながら、不要なものを削除していくという処理をしています。
そのせいで、処理自体はかなり重くなっていますが、柔軟性は高く、現在対応できないマルチパート構成のメールを送信しようとおもったら、ほんのちょっとの改造で対応することができます。

このコアな部分を最初に作り込んだことがQdmailの開発が短期間で済んだ一番の理由であり、このマルチパートエンジンこそが、Qdmailの心臓部分です。

コアのマルチパートエンジンは、バージョンゼロの初期から現在まで、ほとんど変わっていません。
(怖くて変えられない、というのが正解なのですが。)

ユーザーインターフェイスのコード量が多い

しかし、コアな部分のコードは、4000行を超えるコードの3分の1程度であり、その他はすべてユーザーインターフェイスとエラー処理に使われています。

各種フレームワーク対応はもちろん、オブジェクト指向形式、easy形式、qd_send_mail形式と、3つの操作方法を提供しました。
これは、

「初心者でも簡単に(Quick)、玄人には細かく設定できるように(Detailed)」

というQdmailの開発思想からです。

プログラミング上は、まずオブジェクト指向形式ですべての機能が使えるようにし、easyメソッドでは、easy基本メソッドからOOP形式でQdmailを呼び出す方式にし、そしてqd_send_mailでは、OOPは自ら呼び出さず、easyメソッドを呼び出す、完全入れ子形式にしています。
OOP
 ↑
easy基本メソッド ← easyText,easyHtml,easyDeco.....
                   ↑
                qd_send_mail

こうすることで、バグが例え出たとしても、原因が特定されやすい、という構造にしてあります。動作は重くなりますが、それよりもスパゲッティになることの方が怖く、「リスクは集中させて管理する」という方針で作りました。

環境の違い....

それにしても、インターネット上には様々な環境でPHPが動作していることを知りました。
そしてちょっとした環境の違いを吸収することの難しさを学びました。大事なのは、スクリプト自信が、「今、自分はどんな環境にいるのか」ということを自動判別させることでしょう。

Qdmailをご紹介ください。

日曜プログラマにとってみれば、皆様に使われることが一番うれしいです。
単純ですが、紹介されるとやっぱりうれしいです。
(一方で、もし違う環境でうまく動作しなかったら...と恐怖でもあるのですが)

もし、Qdmailを使ってみて、有用だと感じたら、ぜひブログなどでご紹介ください。
そして、うまく動作しなかったら、ぜひフィードバックいただければと思います。


日本語高機能PHPメールライブラリ

1: はま島 2010年03月17日(水) 午後2時01分

phpを勉強はじめています。
いきなり壁にあたっています。
mb_send_mailメール送信プログラムでメール送信できないのですが
原因を教えていただけないでしょうか


名前:  非公開コメント   

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