メールのヘッダーで「ま」が文字化け
お世話になります。
mb_send_mail関数で、メールの差出人、またはあて先で、「ま」の文字を使用すると、「~」(チルダ)に化けてしまいます。
動作環境は下記の通りです。
OS:Max OS X
PHP:4.4.1
ソースコードの文字コード:Shift_JIS
具体的なソースは下記の通りです。
mb_language("ja");
mb_internal_encoding('SJIS');
$mail_to = mb_encode_mimeheader('まみむめも',"JIS") . '<hoge@hogehoge>';
$mail_subject = 'まみむめも';
$mail_body = 'まみむめも';
$mail_header = "From: " . mb_encode_mimeheader('まみむめも',"JIS") . '<hoge@hogehoge>' . "\n";
mb_send_mail($mail_to,$mail_subject,$mail_body,$mail_header);
これで送られるメールは下記の通りです。
差出人:~みむめも<hoge@hogehoge>
あて先:~みむめも<hoge@hogehoge>
件名 :~みむめも
本文 :まみむめも
本文は文字化けしないのですが、メールヘッダーに関与する項目で「ま」が「~」に文字化けしてしまいます。
お手数ですが、よろしくお願いいたします。
お礼
ご教示いただいてから1ヶ月たちました。私のPCは富士通なので富士通のサポートにこの現象の確認を依頼したのですが、富士通では「WindowsXP、OutlookExpress、Nifty」の組み合わせで1200バイトの無改行メール文は化けないそうです。それで私のPCの常駐ソフトがなにか悪さをしているかもしれないからmsconfigで常駐をはずしながら確かめてくれ、というのが今の状況です。私はユーザーですから、そして友人が無改行のメールを寄越すので化けるのが問題なのでどこでどうなるのかを知りたいのが発端でした。御説のように「1行1000文字(1000バイト)以上をSMTPで送信しようとしようとしていること自体が頭のおかしい行為」であるならそれはメールソフトがそのように作られているべきで、百歩譲っても1000バイト以内に改行してください、とマニュアルに書いてあるべきでエンドユーザーは、とりわけメールを寄越す他人に対してどうしてよいかわからない、が現状です。ひとつわかったことはOutlookExpressには「送信時何文字で折り返しますか」という設定ができるようになっているのに、XPSP2以降(OSのせいで)この設定は無効になった、にもかかわらずVISTAのWindowsMailでも同じことのようです。(Vistaユーザーでないので確認できない) いろいろ書きましたが、「1000バイトを超えないようにどこにどうする仕掛けがあるのか」はわからないままです。私のところへは(0xODOA)が漢字コードを分断するのもおかまいなしに挿入されてくる、だから化けるのは事実です。富士通はOutlookExpressとNiftyの組み合わせでは1200バイト無改行でもそのまま伝送できると言っています。 貴回答以外の情報はありませんでした。 この件はこれで打ち切ろうと思います。 SMTPのプロトコルなど、ユーザーの私が読んで見ようとは思いもしませんでした。おかげで野次馬的ながら拾い読みもしてみました。 貴重な情報、まことにありがとうございました。