0

次のメールスクリプトを使用していますが、問題は一部の文字を変換することです。一般的なメールは次のようになります。

Neue Nachricht von Mustermann, Max (bla@blub.de):
Hallo Herr Platzhalter,
wie soeben besprochen, würden wir gern ein
"Schild" mit der Aufschrift  "Aufschrift" bei Ihnen
bestellen.
Bitte teilen Sie uns doch mit, wie wir da
verfahren müssen ... 
Ihnen einen schönen
Urlaub!
Familie Mustermann

これ($ message = filter_var($ _ POST ['message']、FILTER_SANITIZE_SPECIAL_CHARS);)はそれを台無しにしていると思います。では、セキュリティを解除せずに変更するにはどうすればよいですか?そして、そのスクリプトに追加する必要がある他の改善点はありますか?

<?php
    //Enter your email here
    $your_email = "mymail";
    //Enter the subject of the mail here
    $subject = "Kontakt Webseite";


    $name = $_POST['name']; 
    $email = $_POST['email']; 
    //Filter HTML characters
    $message = filter_var($_POST['message'], FILTER_SANITIZE_SPECIAL_CHARS);

    $error = "Fehler: ";

    //Default message if unsuccessful and no other reason found
    $return_message = $error."Leider hat das Versenden der Nachricht nicht geklappt, bitte schreiben Sie mir direkt an  ".$your_email." eine E-Mail";
    if(strlen($name) > 0 && strlen($email) > 0 && strlen($message) > 0) {
        if(filter_var(filter_var($email, FILTER_VALIDATE_EMAIL), FILTER_SANITIZE_EMAIL)) {
            try {
                $body = "Neue Nachricht von ".$name." (".$email."):\n".$message;
                $header = "From: ".$email;
                mail($your_email, $subject, $body, $header);
                $return_message = "Die Nachricht wurde erfolgreich versendet, ich melde mich schnellst möglich bei Ihnen";
            }
            catch(Exception $e) { }
        } else {
            $return_message = $error."Ihre E-Mail Adresse scheint ungültig zu sein.";
        }
    } else {
        $return_message = $error."Ein oder mehrere Felder waren nicht ausgefüllt.";     
    }
    echo $return_message;
?>
4

2 に答える 2

1

Slokun は有効な点を指摘しています。さらに、電子メールのコンテンツには HTML エンティティが含まれており、別の言語で表示されるため、受信した電子メール クライアントで正しく表示されるように、電子メール ヘッダーに次のコードを追加することをお勧めします。

交換:

$header = "From: ".$email;

と:

$header = "From: " . $email . "\r\n";
$header .= "Content-type: text/html; charset=utf-8" . "\r\n";

編集: そうは言っても、上記の行をスクリプトに含める場合、HTML エンティティをサニタイズする行を削除する必要はありません。現時点での問題は、受信メール クライアントがメールの内容を HTML ではなく純粋なテキストとして解釈していることです。

于 2012-04-16T18:09:06.423 に答える
0

それが実際に行う唯一のことは、受信クライアントがそれを適切に処理できることを確認しようとすることであり、とにかくその保証はありません:P

この場合、特殊文字を HTML エンティティ ( \n->&#10など) に変換しているため、再度修正するためのかなりの作業を行わなくてもメールが壊れてしまいます。フィルターを取り除くと、うまくいくはずです。

于 2012-04-16T18:03:53.357 に答える