PHPコーディング

qmailのバグにはまる

2011年04月19日
PayPalオートメール】のユーザーさんから、メールの本文にヘッダが出力される、と連絡がありました。
そんな現象見たことない!
こちらにもテストメールを送っていただきました。

Becky!、Liveメール、Outlook、Outlook Expressで表示してみます。
ちゃんと表示されます。

ちゃんと表示できてますよ、と連絡すると、『そうなんです。友人のメーラでは正しく表示できるのですが、私のOutlook Expressだけおかしいんです。』とのお返事。

では、Outlook Expressのバグ?ということでその線で調べてみることに。
http://support.microsoft.com/kb/973459/ja
『こんなのありました。』とユーザーさんから連絡が。これだと思ったのですが、違っていたようです。

じゃあ、一体何???

私のサーバーから送ったメールは、みんなのところでちゃんと見えている。
でもユーザーさんのサーバーから送ったメールは、ユーザーさんのメーラーでだけ表示がおかしい。
ということは、ユーザーさんのサーバー・・・?
送られたメールが規則に反していて、Outlook Express以外のメーラーはそのバグを吸収してくれている、と解釈すればいいの?

今度はその視点で調べてみます。
もしかして・・・

PHPのmail関数のマニュアルにある
『・・・Unix の MTA の中には、自動的に LF を CRLF に変換してしまう ものがあります・・・』
に当てはまる?

更に調べると、qmailがこれに当たるようです。
qmailにバグが多いのは結構有名な話なんですね。

で、【ini_get('sendmail_path')】で何が出力されるか調べてみました。
すると、【sendmail】の文字が・・・
【qmail】じゃあないの?

でも、一か八かで、改行コードを変更してテストしてもらいました。
ちゃんと表示され始めたとのこと。
となると、隠れ【qmail】か?

ユーザーさんのサーバーのWebサイトを見てみると、『qmailを使用しています』の文字が!
こいつか!! 原因は!!!

で、一件落着。
どうしても【qmail】を利用しているかどうかのチェックの方法が見つからなかったので、どうしてもうまく送信できない場合は、管理画面から改行コードを指定してもらう仕様にちょっと修正。

これにて終了。

mail関数(PHP)のハマりどころ
PHP mail() Header Injection Through Subject and To Parameters

この辺りが参考になります。