我正在使用以下邮件脚本,但问题是它会转换一些字符。 典型的邮件如下所示:
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;
?>
答案 0 :(得分:1)
Slokun提出了一个有效的观点。此外,由于电子邮件内容包含HTML实体并且看起来是另一种语言,因此最好将以下内容附加到电子邮件标题中,以确保通过接收电子邮件客户端进行正确呈现:
替换:
$header = "From: ".$email;
使用:
$header = "From: " . $email . "\r\n";
$header .= "Content-type: text/html; charset=utf-8" . "\r\n";
编辑:话虽如此,如果在脚本中包含上述行,则无需删除清理HTML实体的行。您目前的问题是接收电子邮件客户端并不是将电子邮件内容解释为HTML而是纯文本。
答案 1 :(得分:0)
它唯一真正要做的就是确保接收客户端能够正确处理它,并且无论如何都无法保证:P
在这种情况下,它会将您的特殊字符转换为HTML实体(例如\n
- &gt; 

),这会破坏您的电子邮件,而无需再进行大量工作来修复它们。摆脱过滤器,你应该很好。