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

斯洛昆提出了一个有效的观点。此外,由于电子邮件内容包含 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 回答