1

私はウェブサイトを持っており、「連絡先」セクションには、ユーザーが私に連絡するために記入できるフォームがあります。フォームは、アクションが php ページである単純なフォームです。

PHPコード:

 $to = "email@domain.com";

 $name=$_POST['name']; // sender name
 $email=$_POST['email']; // sender email
 $tel= $_POST['tel']; // sender tel
 $subject=$_POST['subject']; // subject CHOSEN FROM DROPLIST, ALL TESTED
 $text=$_POST['text']; // Message from sender
 $text.="\n\nTel:".$tel; // Added to message to show me the telephone nr to the sender at bottom of message

 $headers="MIME-Version: 1.0"."\n";
 $headers.="Content-type: text/plain; charset=UTF-8"."\n";
 $headers.="From: $name <$email>"."\n";

 mail($to, '=?UTF-8?B?'.base64_encode($subject).'?=', $text, $headers, '-fno-reply@domain.com');

これがほとんどの場合うまくいく理由を誰か教えてください。

=?UTF-8?B??=

私は Outlook Express を使用しており、このSystem.Net.Mail と =?utf-8?B?XXXXX.... ヘッダーを読みまし たが、役に立ちませんでした。

POP3 メールを取得する実際のメールプログラムにログインすると、メールは同じように見えるため、問題は Outlook にはありません。

Outlook で右クリックして [メッセージ ソース] を選択すると、[差出人] 情報がありません。

たとえば、適切なメッセージは次のようになります。

件名: =?UTF-8?B?w5Z2cmlndA==?=
MIME バージョン: 1.0
コンテンツ タイプ: テキスト/プレーン。文字セット=UTF-8
差出人:ジョン・ドウ

ただし、問題のあるものは次のようになります。

件名: =?UTF-8?B??=
MIME バージョン: 1.0
コンテンツ タイプ: テキスト/プレーン。文字セット=UTF-8
から:  

あたかもどこかで情報が失われたかのように。

また、私が自分で管理する VPS を持っていることも知っておく必要があります。それが何か関係がある場合は、メールサーバーとしてpostfixを使用します。しかし、繰り返しになりますが、なぜそれが時々機能するのでしょうか?

また、特殊文字が (Outlook と Web メールの両方で) 正しく表示されないことがあります。

たとえば、スウェーデン語で「Björkman」という名前は のようBjörkmanに表示されますが、これもたまにしかありません。

少なくとも私にとって追跡するのは非常に難しいので、誰かがこの問題について何か知っていることを願っています.

さらに入力が必要な場合はお知らせください。

4

1 に答える 1

0

すべてのフィールドが空白のままフォームが投稿されているようです。ネットをクロールして空のフォームを送信するボットがあります。これを実際のフォームデータで再現できましたか?

追加のヒント: あなたのコードは電子メール ヘッダー インジェクションに対してオープンです - $_POST['name'] で必要なヘッダーを改行で区切って投稿できます。あなたのコードはそれを電子メール ヘッダーに挿入します。少なくとも、ヘッダー セクションに入るユーザー データから改行を削除します。

于 2010-12-23T16:24:18.850 に答える