人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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>

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

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

●質問者: warumaki
●カテゴリ:インターネット ウェブ制作
✍キーワード:aaa PHP アドレス メール 不思議
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● km1967
●27ポイント

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

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

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

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

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

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

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

◎質問者からの返答

PHP5

sendmail

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


2 ● e55ind
●27ポイント

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

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

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

◎質問者からの返答

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

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

$email_enc = mb_encode_mimeheader($email);

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

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

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


3 ● tobeoscontinue
●26ポイント

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

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

◎質問者からの返答

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

試してみます!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ