WordPress 2.5.1 日本語版同梱の WP-Multibyte-Patch (バージョン 1.0) を利用していますが、これが送信するメールの Subject がうまく表示できません (特に nkf -m がダメ)。どうやら、MIME B エンコードするとき「1行76文字を越えるエンコード」を行なっているようです。
wp-multibyte-patch/ext/ja/class.php の42行目 encode_mimeheader_b_uncut() が以下のようになっています。
function encode_mimeheader_b_uncut($string, $charset = 'UTF8') {
return "=?$charset?B?" . base64_encode($string) . '?=';
}
これは、RFC2047 (日本語訳) で定義されている「1つ以上の 'encoded-word' を含むそれぞれの行は、76文字に制限される」に違反しています。$string を、floor( (76 - strlen("=?$charset?B??=")) * 3 / 4) 文字ごとに mb_strcut() してから、base64_encode() すれば、うまく適合させることが可能なのではないでしょうか?
メソッド名がモロ encode_mimeheader_b_uncut() となっているので、あえて「76文字を越えてエンコードする」という方針なのだと思いますが、そうされている意図は何でしょう??
(追記) ちょっと試してみましたが、mb_strcut() は、カットした文字列にエスケープシーケンスを補わないんですね……。そのへんを考慮したコード案を提示してみます。