为什么我的PHP电子邮件没有HTML和utf-8?

问题描述:

我有一个联系表,并希望格式化HTML输出电子邮件,并使用字符集utf-8,因为我需要一些特殊字符。我有以下代码,但它不起作用。 编辑:电子邮件发送,但没有html和utf-8。为什么我的PHP电子邮件没有HTML和utf-8?

<?php 
if ($_POST["email"]<>'') { 
    $ToEmail = '[email protected]'; 
    $EmailSubject = 'Email Subject'; 
    $mailheader = 'From: [email protected]' . "\r\n" . 
     'Reply-To:' .$_POST["email"]. "\r\n" . 
     'X-Mailer: PHP/' . phpversion(); 
     'MIME-Version: 1.0'."\r\n". 
     'Content-Type: text/html; charset=utf-8'."\r\n". 
    $MESSAGE_BODY .= "<b>Navn:</b> ".$_POST["name"]."\r\n"; 
    $MESSAGE_BODY .= "<b>Telefon:</b> ".$_POST["telephone"]."\r\n"; 
    $MESSAGE_BODY .= "<b>Email:</b> ".$_POST["email"]."\r\n\r\n"; 
    $MESSAGE_BODY .= "".nl2br($_POST["message"])."\r\n"; 
    mail($ToEmail, $EmailSubject, $MESSAGE_BODY, $mailheader) or die ("Failure"); 
?> 
+1

不工作?你希望我们猜测__how__它不工作? –

+1

那么,该代码_states_的内容是类型的HTML,但最有可能的'$ _POST [“message”]'不包含这种标记,但纯文本。没有神奇的小精灵会转换和增强你的文本,因为你说它是HTML标记。您需要创建有效的标记,以及文档标签周围的内容。否则,您可能会冒中间电子邮件服务器“修复”您的信息。 – arkascha

+0

它也开放标题注入。 –

尝试从

$headers .= "Content-Type: text/html; charset=UTF-8\r\n"; 
to 
$headers .= "Content-Type: text/html; charset=iso-8859-1\r\n"; 

它改变头更好地利用PHPMailer这将允许您通过SMTP服务器发送邮件

+0

感谢您的回复,但不知道如何将charset更改为iso-8859-1将帮助我,因为我需要使用utf-8,因为有些斯堪的纳维亚字母。 – Naguah

我发现错了的唯一的事情就是秩序代码。通过在Content-Type下移动'X-Mailer: PHP/' . phpversion();,邮件编码正确。

这是我如何固定它:

$mailheader = 'From: [email protected]' . "\r\n" . 'Reply-To:' .$_POST["email"]. "\r\n" . 'MIME-Version: 1.0'."\r\n". 'Content-Type: text/html; charset=utf-8'."\r\n". 'X-Mailer: PHP/' . phpversion();

+0

发送邮件之前请尝试以下编码。 utf8_encode($ MESSAGE_BODY); –