$replyto = "aaa@bbb.com";
$fmail = "aaa@bbb.com";
$mailto = "aaa@bbb.com";
と記述しており、問題なくフォームに入力して送信できます。
ただ。。
From: ""フォームに入力したアドレス"@bbb.com"
<"=?ISO-2022-JP?B?へんな英語の記号?="@bbb.com>
To: <aaa@bbb.com>
という状態でメールにやってきます。
From: "フォームに入力したアドレス"
To: <aaa@bbb.com>
といった具合に問題なく受信できるケースもあり
たいへん不思議です。
原因があれば教えてください。
よろしくお願いたします。
まずはお願いなのですが、
どんなスクリプトでメール送信しているか、PHPのバージョンはいくつかなど
何も判らないと原因の特定は難しくなりますので、必須だとご記憶ください。
不適当な回答が集まっても混乱をきたしますから、私への返信欄か、
あるいは、コメント欄を開く設定に変更してコメント欄)に、
書き加えておくことを勧めます。
参考URLありがとうございます。
たぶんアンダーバーが入ったメールアドレスに起こる現象のようです。
$email_enc = mb_encode_mimeheader($email);
$header .= "From: $email_enc\n";
$header .= "Reply-To: $replyto\n";
上記の記述の他に何か必要でしょうか。
"フォームに入力したアドレス"が非US-ASCIIで入力されているものと思います。
ベッダで非US-ASCIIが使用される場合は=?charset?encoding?encoded-text?=という形式にすることになっています。
=?ISO-2022-JP?B?へんな英語の記号?=は文字コード系がISO-2022-JPで符号化方式がB(base64)、へんな英語の記号が符号化された文字列になります。
$email_enc = '<'.mb_encode_mimeheader("フォームに入力したアドレス").'@bbb.com>';
処理のしかたとしてはこのようになっているのではと思いますがメールアドレスでは非US-ASCIIが現れる場所は決まっているので正しくありません。
ローカル部に使用できる文字は制限されているのでそれで仮にフォームに入力したアドレスが全角の英数字が考えられるのであればmb_convert_kanaで「全角」英数字を「半角」に変換することが考えられます。
$email_enc = '<'.mb_convert_kana("フォームに入力したアドレス", 'a').'@bbb.com>';
注意:encoding パラメータを指定しないとかmb_internal_encodingが使われますがISO-8859-1だと日本語でないとしてそのまま出力されるようです。
しかしローカル部で使用できる文字は制限されているのでこれだけでは不十分かもしれませんのでstr_replace()の方がいいかもしれません。
$email_enc = mb_encode_mimeheader("表示部").'<'.mb_convert_kana("ローカル部", 'a').'@bbb.com>';
表示名も付加したいというのであれば上記のようになると思います。
丁寧な解説ありがとうございます!
試してみます!
PHP5
sendmail
を使って送信しています。