PHP + sendmail (文字化け対策) 2

じゃあ実際にどういうコードかけばいいの?ということで、
http://oshiete1.goo.ne.jp/qa4318876.html
といろいろ参考の結論。

//######## 設定内容 ########

define('APP_ENCODE', 'UTF-8');
define('MAIL_ENCODE', 'JIS');
$mailto="*****@*****";
$mailfrom="*****@*****";
$fromname="送信元テスト";
$mailsbj="テストタイトルです。";
$mailbody="メール本文内容";

//##########################

mb_language("ja");

mb_internal_encoding(APP_ENCODE);

$fromname=mb_encode_mimeheader($fromname,MAIL_ENCODE);

$mailsbj=conv_auto_mime($mailsbj,APP_ENCODE);

$mailbody=mb_convert_encoding($mailbody,MAIL_ENCODE,APP_ENCODE);

$mailheader="From:" . $fromname . " <" . $mailfrom . ">\nReply-To:" . $mailfrom . "\nX-Mailer:";

mail($mailto,$mailsbj,$mailbody,$mailheader);

//mimeの文字長制限対策
function conv_auto_mime($str,$app_encode){
$pos = 0;
$str=mb_convert_encoding($str,"JIS",$app_encode);
while ($pos < mb_strlen($str, "JIS")){
$output = mb_strimwidth($str,$pos,36,"","JIS");
$pos += mb_strlen($output, "JIS");
$TempStr .=(($TempStr)?" ":"")."=?ISO-2022-JP?B?".base64_encode($output)."?=";
}
return $TempStr;
}

本文の内容とか、mb_internal_encodingの後の方が良いのかなぁとも思ったが、これでEUC-JPでも、SJISでもとりあえず文字化けしなかった。

気になったのが JIS と ISO-2022-JP の関係。
http://x68000.q-e-d.net/~68user/webcgi/char-code-1.html
ここによると、つまりは同じってことで、上のコードで良いのかな。。。?

前の記事の internal_encodingをソースコード文字コードと揃えるからすると、
mb_internal_encoding("SJIS");
を入れる気もするのだが。。。

文字化けに関する他の参考サイト
http://www.securehtml.jp/utf-8/php_utf_mail.html

途中で携帯サイト構築に便利なサイトがあったのでメモ
http://blog.fkoji.com/2008/09211552.html