mb_send_mailで文字化けする場合

phpのmb_send_mailでメールを送信する際に文字化けが発生していたので、その原因と対応を残しておきます。

【事象】
受信したメールが、下図のように?が含まれていると 凡そUTF-8で化けているなとは予想しますが、一部は正常に見えている状態でした。

文字化けメール

【原因】
内部の文字コードはutf8 だが、mb_language(‘Japanese’)が指定されていたため。

mb_send_mailは、送信する際、mb_languageで設定・取得できる値にエンコードして送信されるらしいです。

参考)https://www.php.net/manual/ja/function.mb-send-mail.php

mb_language(‘Japanese’) もしくは、 mb_language(‘ja’)はISO-2022-JP(一般的にJIS)のようで、語弊覚悟で言うと、JISに変換されるので化けるようです。

【対処方法】
utf8で送る場合は、

mb_language('uni'); // ← uniを指定する
mb_internal_encoding('UTF-8');

mb_send_mail($to, $subject, $message, $headers);

としておけば、大丈夫そうです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です