我使用Postfix作为邮件服务器。 我有Ubuntu操作系统。
问题是我的电子邮件没有被我的VPS提供商使用的邮件软件正确编码。
据他们说,问题在于我。
这只是名称字段不正确编码。 例如,“Björn”在我的电子邮件中变成了“Björn”。
但是,当我回显$name
,输出“ Björn ”,这是正确的。
另外,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行,也没有运气。
我能想到的最后一件事是POSTFIX ,那里可以设置字符编码吗? 有人知道吗?
我看到的一个问题是,在$headers
embedded$name
后 ,您已经将$name
转换$name
UTF-8。 那么发送到postfix的是之前的内容。 你应该iconv()
它,并添加到$headers
之前 ,它的MIME编码。
消息文本可以是您定义的任何字符集(因为您在邮件头中定义了邮件的字符集(content-type = utf8),但头文件(subject,from – name,email)在客户机中定义Gmail正在使用utf8作为默认,而其他正在查看电子邮件的客户端可以使用任何他们喜欢的东西,基本上只有ASCII字符是完全支持到处。
编辑:如果它们是MIME编码(“=?charset?encoding?encoded text?=”),则可以在邮件标题中包含US-ASCII之外的字符