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);
としておけば、大丈夫そうです。