岩本隆史の日記帳(アーカイブ)

はてなダイアリーのサービス終了をうけて移行したものです。更新はしません。

mail_fetchとcyrusで「Message contains NUL characters」が出ないようにする方法

fetch.phpに1行追加すればOK。

            while (list($lineNum, $line) = each ($MessArray)) {
                 $Message .= $line;
            }
            $Message = str_replace("\0", '', $Message);  // added

cyrusはメール内のNUL文字を許可しない。そのため、SquirrelMailのmail_fetchプラグインでNUL文字を含むメールをPOP受信すると、「Message contains NUL characters」エラーが発生してしまう。

これを防ぐには、cyrusメールボックスへのコピー前にNUL文字を削除すればよい。mail_fetch ver1.3.0で動作を確認した。

追記(2007-11-17)

上記のやりかただと、$Messageが馬鹿でかい場合にメモリが足りなくなることがあることに気づいた。下記のほうが良いだろう。

            while (list($lineNum, $line) = each ($MessArray)) {
                 $line = str_replace("\0", '', $line);  // added
                 $Message .= $line;
            }