旧それなりブログの跡地、画像やスタイルやJSなどが壊れてることがあります。

[PHP] Qdmailを使ってみた

2009年12月1日

mb_send_mail がアホ過ぎるとぼやいてたら、
同僚が「Qdmailというのがいいよ」と教えてくれたのでテストしてみました。

Qdmail概要

1枚のPHPスクリプトで構成されるライブラリです。
例えば、こんな風に使います。

require_once '/path/to/qdmail.php';
$mail =& new Qdmail();
$mail->to('to@example.com', '差出人名');
$mail->subject('件名です');
$mail->text('内容です');
$mail->from('from@exmaple.com', '宛先名');
$mail->send();

これで、件名が長くても、JISメールでも、ちゃんと送ることができます。

それ以外にも、主要なPHPフレームワーク上で使う際の配慮や、
ログ対応、デコメ対応などがなされており、
本家マニュアルサイト↓もしっかりと書き込まれています。

Qdmail本家サイト:
http://hal456.net/qdmail/

不便な点

とはいえ、いくつか個人的には使いにくい部分もありました。

1. 入力文字コードの明示指定が出来ない

正確には、出来ない訳ではなく、Qdmail#qd_detect_order で、
PHPのmb_detect_orderのルールに則る形で緩やかな指定は可能です。
ただ、mb_detect_order が false を返すような状況でも、
文字コード変換無しでそのまま処理を継続するので、ちょっと気持ち悪さが残りました。
まー、ほとんどの状況で大丈夫なはずなので、実際は影響は無いと思います。

2. 基本的に例外を返さない

PHP4対応のため仕方ありませんが、上記のように
「文字コード判別に失敗したら、普通は例外を投げて処理を止めるだろう」
・・・という造りにはなっていません。
exit(“status”); のような擬似的な例外システムも無く、概ね処理を継続します。

3. 環境によっては、標準エラー出力が常に出る

バッチモードで叩くと良くわかりますが、環境によっては以下のようになります。

$php qdmail_test.php
sendmail: invalid option -- d
sendmail: invalid option -- 0
sendmail: invalid option -- .
sendmail: invalid option -- 1
sendmail: invalid option -- d
sendmail: fatal: usage: sendmail [options]

これは、Qdmail#isQmail 内で、OSコマンドを直接叩いているためです。

対処は、phpオプションでどうにかなるのかは不明ですが、
ダメなら、「Linux 標準エラー出力 抑止」 とかでググって解決したりとか、
isQmailを通さないように変更とか、諦めて気にしないとか、でしょうか。

ていうか

mb_"real"_send_mail が欲しいっす・・・。