電気ウナギ的○○

About Home

PHP で UTF-8 なメールを送る

shinoda (2016年3月25日 12:32)
ちょっと他人の書いた PHP の修正案件があったので、メモ。

UTF-8 で書かれた PHP ソースの中で、以下のような記述でメールの送信を行っている。

$w_from = "From: ほげほげ星人 <no-reply@exsample.jp>";
$w_to = "hogehoge@exsample.com"
$w_subject = "[返信]ありがとうございます";
$w_body = "あれやこれや...";

mb_language("Japanese");
mb_internal_encoding("UTF-8");

mb_send_mail($w_to, $w_subject, $w_body,  $w_from);

が、これ、実際にはむちゃくちゃな内容のメールが届く。

Content-Type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit

とか言いながら本文は UTF-8 だし、FROM アドレスは MIME B エンコードされず、Subject だけは ISO-2022-JP で MIME B エンコードされているという状況である。

まあ、最近のメールソフト(Web メール含む)は charset の記述を無視して、実際に本文の文字コードをチェックして表示を行うものが多いから、こんな状況でも一見、ちゃんと表示されてたりするので大丈夫・・・というか、質が悪いな、これ(^^;
なんのための、charset 指定だっつうの(^^;

どうも、UTF-8 のメールを送りたいようなので、

$w_from = "From: ほげほげ星人 <no-reply@exsample.jp>";
$w_to = "hogehoge@exsample.com"
$w_subject = "[返信]ありがとうございます";
$w_body = "あれやこれや...";

header('Content-Type: text/html; charset=UTF-8');
header('Content_Language: ja');

mb_language("uni");
mb_internal_encoding("UTF-8");

mb_send_mail($w_to, $w_subject, $w_body,  $w_from);

という具合に、Content-Type ヘッダーを明示的に指定し、mb_language は Japanese ではなく uni を指定してやれば、Subject は UTF-8 で MIME B エンコードされるし、

Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: BASE64

という Content-Type がセットされて、本文との整合性が取れる。

いや、俺の世代だと、そもそも UTF-8 のメールというのがすでに気持ち悪いのだけど、これも時代の流れ(^^;

・・・あ、うまくいったと思ったけど、これだと From アドレスは MIME B エンコードされないままだな。
そこは自前でエンコードしてからセットしてやる必要があるのか。ふむふむ。

$w_from = "From: " . mb_encode_mimeheader("ほげほげ星人", "UTF-8", "B") . " <no-reply@exsample.jp>";

だな。

電気ウナギ的○○

電気ウナギ的○○

About Back

コメント(0)

電気ウナギ的○○

電気ウナギ的○○

About Back

トラックバック(0)

トラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/3854

電気ウナギ的○○

About This Site

電気ウナギ的○○
岩国在住。広島で働く超零細IT企業社長のいわゆる社長日記。
何か、酒と食い物のことばかり書いているようで・・・お察しのとおり、肥満体です:-)


2011/06/24
iPhone用サイト公開

Create with jQuery, jQTouch.


CLOSE