掲題の通りですが、
PHPのmail関数を用いて、日本語のメールを文字化けせずに送信受信を使用として、以下のような実装をしています。
PHPのmail関数の
第2引数に渡すメールのタイトルを
php
1$title = '"????❔???? ???? ???? 髙 ああ いい うう ええ ABCDEFG"'; 2$title = base64_encode($title); 3$title = "=?UTF-8?B?{$title}?="; 4
メールヘッダーのFromに設定する送信元の名前を
php
1$fName = '???????? ????????❔???? ???? ????'; 2$fName = mb_encode_mimeheader($fName, "UTF-8"); 3
メール本文はそのままUTF-8のままで
php
1 2$body = '????⛄ ????❔???? ???? ???? 髙 ああ いい うう ええ ABCDEFG';
最終的にメールヘッダーは
php
1From: =?UTF-8?B?8J+Vk/CfhpEg8J+RjPCfkqLinZTwn4W+IPCfkL4g8J+YqA==?= <sample@gmail.com> 2Reply-To: sample@gmail.com 3Return-Path: sample@gmail.com 4X-Mailer: Send Mail By MyMail 5MIME-Version: 1.0 6Content-Type: text/plain; charset=UTF-8 7Content-Transfer-Encoding: 7bit 8Bcc: aaa@sample.com,bbb@sample.com 9
このような内容になりました。
上記の変数をそのまま、mail関数に使用しています。
php
1mail("info@sample.com", $title, $body, $headers); 2
このような実装で、windows10のデフォルトのメーラおよびGmailで受信すると
正しくUTF-8の絵文字で取得できているようです。
さて、質問したいことは、
メールの差出人の送信時のエンコーディングから
最終的に 7bitの文字列であれば良いこと、且つ
"=?UTF-8?B?{$title}?=";
上記のようなフォーマットで元の文字列が UTF-8且つ ?B?という文字列から送信したい内容がbase64エンコードされていれば良いこと。
が想定できました。
送信時のヘッダーをみると
メールタイトルとメールヘッダーのFromは同一のフォーマットになっていることが
わかりますが、
なぜメール本部はなんの処理をせずUTF-8のまま送信できるのでしょうか?
メール関連のプロトコルにお詳しいかたご教授のほどお願いいたします。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/08 10:57
2019/09/08 11:03 編集