PHPでフォームを作っています。


$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>

といった具合に問題なく受信できるケースもあり
たいへん不思議です。

原因があれば教えてください。
よろしくお願いたします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2010/02/10 13:05:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:km1967 No.1

回答回数541ベストアンサー獲得回数40

ポイント27pt

まずはお願いなのですが、

どんなスクリプトでメール送信しているか、PHPのバージョンはいくつかなど

何も判らないと原因の特定は難しくなりますので、必須だとご記憶ください。

不適当な回答が集まっても混乱をきたしますから、私への返信欄か、

あるいは、コメント欄を開く設定に変更してコメント欄)に、

書き加えておくことを勧めます。

http://q.hatena.ne.jp/1262071576

id:warumaki

PHP5

sendmail

を使って送信しています。

2010/02/03 13:20:51
id:e55ind No.2

回答回数162ベストアンサー獲得回数4

ポイント27pt

文字のエンコードがちゃんと出来てない可能性あり

http://wiki.poyo.jp/read/PHP/tips/mail/ja_mail

http://q.hatena.ne.jp/1121403293

id:warumaki

参考URLありがとうございます。

たぶんアンダーバーが入ったメールアドレスに起こる現象のようです。

$email_enc = mb_encode_mimeheader($email);

$header .= "From: $email_enc\n";

$header .= "Reply-To: $replyto\n";

上記の記述の他に何か必要でしょうか。

2010/02/03 14:03:47
id:tobeoscontinue No.3

回答回数220ベストアンサー獲得回数59

ポイント26pt

"フォームに入力したアドレス"が非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>';

表示名も付加したいというのであれば上記のようになると思います。

id:warumaki

丁寧な解説ありがとうございます!

試してみます!

2010/02/03 16:37:48

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません