phpで普通にmail関数で送信していて、自分もそれで受信して読めるからよいと思っていたが、
ユーザーのメーラーで文字化け。
よくよく受信メールのソースを見てみると、本文の日本語がそのまま読める。
日本語が読めるのは、間違いなのだ。汎用性が低いというか、
Gmailとかが自動的にうまく読ませてくれているだけなのだ。
メールの文字コードは、いろいろなバターンがある。
ただ、汎用性が高いのは、base64形式だろう。
ということで、「base64」で送るための設定をまとめておきます。
メールのヘッダーに
$headers .= "Content-Transfer-Encoding: base64\r\n";
のような形で、base64でエンコードすることを明記しておく。
次に本文をbase64でエンコードする。
する前に、phpでの文字コードの設定もメール送信直前にしておく。
mb_language("uni");
mb_internal_encoding("UTF-8");
$mailbody = base64_encode($mailbody);//mb_send_mail関数で送る場合はいらない
この後に、mail関数で送信する。
mail関数は内部では、エンコードしないので、上記のようにエンコードしておくことが必要
mb_send_mail関数は、内部で自動エンコードするので、base64のエンコードは必要ない。
これが重要です。
メーラー自体がだんだんと賢くというか、対応するようになっているので、問題ないケースもあるけど。
昔は、もっとややこしかったような気がします。
たしか、件名はJISで送るとかがあったような。
ググると、いろんな情報が出ています。
いろんなパターンをやりましたが、件名はなにもしないと、UTF-8なので問題ありませんでした。
(最近は、スクリプト内やDBはUTF-8という前提です。)
WEBプログム、WEBデザインなどの制作については、以下を御覧ください。
WEBプログム、WEBデザインなどの制作