联机表单中的电子邮件标题显示不正确

时间:2019-10-26 21:28:24

标签: php html-email

我在网上有一个调查表。填写此表单后,我将使用PHP函数mail()通过电子邮件将其发送给我。表单正文及其包含的数据(包括私人消息)正确显示在 gmail.com 上。但是,此问题发生在电子邮件本身的标题中。某些字符显示不正确。 这是一个示例标头:

$headers = "Content-Type:text/html; charset=utf-8\r\n";
$headers .= "From:" .$email . "\r\n";
$headers .= "Reply:" . $email . "\r\n";
$headers .= "X-Mailer: PHP/". phpversion() . "\r\n" ;

必填的电子邮件主题:

Nový dotaz -- námět, od Fořt Petr <p.fort1990@gmail.com>

同时显示主题:

Nový dotaz -- námÄ☒t od: FoÅ☒t Petr <p.fort1990@gmail.com>

平方的时间符号更像一个矩形。

有什么问题吗?还是我应该在哪里寻找错误?

2 个答案:

答案 0 :(得分:0)

我不确定\ r \ n是否适用于所有平台

请参阅:Which line break in php mail header, \r\n or \n?

代替

("xxx\r\n\yyy");

使用

Header('xxx');
Header('yyy');

或使用PHP_EOL,而不是“ \ r \ n”

答案 1 :(得分:0)

问题解决了。我的托管服务提供商对标头使用了不同的字符编码-我无法解释原因,但是以下php函数可以完成所有操作。

function recode_to_utf8 ($text, $encoding = "utf-8")
{
    return "=?$encoding?Q?" . imap_8bit($text) . "?=";
}

现在,您要做的就是使用mail()方法与以上recode_to_utf8()所定义的方法结合使用来发送电子邮件。像这样:

mail(recode_to_utf8($mail_to), recode_to_utf8($subject), recode_to_utf8($message), recode_to_utf8($headers));

如果其他人遇到与我相同的问题,希望对他们有帮助。