mb_encode_mimeheaderで文字化けするときの対処方法

フォームに入力された内容をPHPのmb_send_mailでメールの送信をしようと、以下のようなスクリプトで送信したらmb_encode_mimeheaderで指定した文字が文字化けしました。

<?php
mb_language("Ja") ;
$to = mb_encode_mimeheader("A様","iso-2022-jp")."<a@aaa.com>";
$subject = "◯◯の件について";
$subject = mb_convert_encoding($subject,"iso-2022-jp","auto");
$content = "A様\nこの度はありがとうございました。\nBより";
$content = mb_convert_encoding($content,"iso-2022-jp","auto");
$from = "From:".mb_encode_mimeheader("差出人B","iso-2022-jp")."<b@bbb.com>";
mb_send_mail($to,$subject,$content,$from);
?>

これで送信したら、以下のようなメールが届きました。

From: 綏??坂査鐚 <b@bbb.com>
To: 鐚≧? <a@aaa.com>
件名: ◯◯の件について
本文:
A様
この度はありがとうございました。
Bより

原因

サーバーの内部エンコーディングとmb_encode_mimeheaderで使う文字は同じエンコーディング同士じゃないと文字化けするようです。今回の環境では以下のエンコーディングとなっています。

対処方法

となるように、mb_encode_mimeheaderに使う文字列を内部エンコーディングに合わせて『EUC-JP』にしてみました。

<?php
mb_language("Ja") ;
$to = mb_convert_encoding("A様","euc-jp","auto");
$to = mb_encode_mimeheader($to,"iso-2022-jp")."<a@aaa.com>";
$subject = "◯◯の件について";
$subject = mb_convert_encoding($subject,"iso-2022-jp","auto");
$content = "A様\nこの度はありがとうございました。\nBより";
$content = mb_convert_encoding($content,"iso-2022-jp","auto");
$from = mb_convert_encoding("差出人B","euc-jp","auto");
$from = "From:".mb_encode_mimeheader($from,"iso-2022-jp")."<b@bbb.com>";
mb_send_mail($to,$subject,$content,$from);
?>

すると正常なメールが届きました。

From: 差出人B <b@bbb.com>
To: A様<a@aaa.com>
件名: ◯◯の件について
本文:
A様
この度はありがとうございました。
Bより
PAGETOP