mb_encode_mimeheader
RFC2047あたりで長すぎるのは折り返してねとなっているので、mime情報は独自実装よりmb_encode_mimeheader使うのがベターだと思います。
モバイルだと30Byte制限あるので折り返し必要になることなさそうですが。
<?php mb_internal_encoding('SJIS-win'); $subject = "サブジェクトのテストでござる①"; print mb_encode_mimeheader($subject, 'SJIS-win'); // =?Shift_JIS?B?g1SDdYNXg0aDToNngszDvcSCxYKygrSC6YdA?= print base64_decode('g1SDdYNXg0aDToNngszDvcSCxYKygrSC6YdA'); // サブジェクトのテストでござる① print mb_encode_mimeheader($subject, 'SJIS'); // =?Shift_JIS?B?g1SDdYNXg0aDToNngszDvcSCxYKygrSC6T8?= print base64_decode('g1SDdYNXg0aDToNngszDvcSCxYKygrSC6T8'); // サブジェクトのテストでござる? print mb_encode_mimeheader('とても長いサブジェクトのテストなんですよ', 'UTF-8'); // =?UTF-8?B?44Go44Gm44KC6ZW344GE44K144OW44K444Kn44Kv44OI44Gu44OG44K544OI?= // =?UTF-8?B?44Gq44KT44Gn44GZ44KI?= ?>
動作的には、internal_encodingから第二引数へ変換してbase64エンコードにMIME情報付加な感じ。
SJISやUTF8で送信したい場合はmb_send_mailは窓から投げ捨てましょう。