后缀字符编码?

后缀字符编码?

我使用 Postfix 作为邮件服务器。我有 Ubuntu 操作系统。

然后我使用 PHP 发送电子邮件。

问题是我的 VPS 提供商使用的邮件软件都没有对我的电子邮件进行正确的编码。

据他们说,问题出在我身上。

只有姓名字段编码不正确。例如,我的电子邮件中的“Björn”变成了“Björn”。

但是,当我回应时$name,它输出“比约恩“ 哪个是对的。

此外,gmail 和 hotmail 确实显示正确。

奇怪的是,“文本”(消息本身)被正确编码。

我使用以下命令发送邮件:

$headers="MIME-Version: 1.0"."\n";
$headers.="Content-type: text/plain; charset=UTF-8"."\n";
$headers.="From: $name <$email>"."\n";

$name=  iconv(mb_detect_encoding($name), "UTF-8//IGNORE//TRANSLIT", $name);
//// I HAVE TRIED WITH AND WITHOUT THE LINE ABOVE, NO DIFFERENCE            

mail($to, '=?UTF-8?B?'.base64_encode($subject).'?=', $text, $headers, '[email protected]'); 

我也尝试过使用和不使用 iconv 行,但是都没有成功。

我能想到的最后一件事是后缀,那里可以设置字符编码吗?有人知道吗?

答案1

消息文本可以是您定义的任何字符集(因为您在邮件头(content-type = utf8)中定义了邮件的字符集),但邮件头(主题、发件人姓名、电子邮件)是在读取电子邮件的客户端中定义的,因此您无法影响它。Gmail 使用 utf8 作为默认设置,而查看电子邮件的其他客户端可以使用他们喜欢的任何字符,并且基本上只有 ASCII 字符在任何地方都受到完全支持。

编辑:如果字符是 MIME 编码的(“=?charset?encoding?encoded text?=”),则可以在邮件头中包含 US-ASCII 以外的字符。

答案2

我看到的一个问题是你已经转换$name为UTF-8将其嵌入到 中$headers。因此,发送到 postfix 的内容是之前的内容。您应该iconv()将其添加到其中并添加 MIME 编码将其添加到$headers

相关内容