mail() 没有正确发送邮件正文,主题——好的

Posted

技术标签:

【中文标题】mail() 没有正确发送邮件正文,主题——好的【英文标题】:mail() doesn't send message body correctly, subject -- ok 【发布时间】:2016-05-14 23:58:12 【问题描述】:

脚本从 webform 获取数据并将其发送到邮件客户端和 crm。来自网络表单的数据是西里尔文。 我想不通的是为什么我确实收到了$email_subject"Заголовок",和$email_message,而不是"Сообщение"——我得到"СообÑение""=?utf-8?B?0KHQvtC+0LHRidC10L3QuNC1Cgo=?=",具体取决于编码方法。

echo mb_detect_encoding($email_message); 表明 $email_message 是 utf-8。

$email_to = "mail@mail.zu";
$email_subject = "=?UTF-8?B?".base64_encode("Заголовок")."?=";

//... here goes some code for taking data from webform, checking etc.

$email_message = "=?UTF-8?B?".base64_encode("Сообщение")."?=";
//I have also tried $email_message = mb_convert_encoding("Сообщение", "utf-8","AUTO");

$headers = 'От: '.$email_from."\r\n". 
'Ответить: '.$email_from."\r\n" .
mail($email_to, $email_subject, $email_message, $headers);

【问题讨论】:

try with (mb_convert_encoding("Сообщение", "utf-8"),因为它在我的本地显示正确。 正如我所提到的,//我也尝试过 $email_message = mb_convert_encoding("Сообщение", "utf-8","AUTO");并且没有自动也.. 【参考方案1】:

您好,允许邮件标头发送 utf-8 字符集在您的标头中添加这些行

$headers = "Content-Type: text/html; charset=UTF-8";

也推荐你How to send UTF-8 email?

【讨论】:

是的,我有,忘了复制:'$headers .= "\n".'MIME-Version: 1.0'."\n".'Content-Type: text/html; charset="UTF-8";'."\n".'Content-Transfer-Encoding: base64';'【参考方案2】:

这个

   iconv ('utf-8', 'ISO-8859-5', $str);

帮助。虽然我之前尝试过,但似乎我选择了不合适的 ISO- 是错误的。让我感到困惑的是,与 CRM 相比,使用 Outlook、Mail 或网络邮件(如 gmail)等邮件客户端没有问题。 现在一切正常。

【讨论】:

以上是关于mail() 没有正确发送邮件正文,主题——好的的主要内容,如果未能解决你的问题,请参考以下文章

Java mail发送邮件附件出现.eml文件夹

强制 phpmailer 发送正文为空的邮件

如何利用linux 的mail命令发送带格式(比如正文的字体,大小等)的邮件呢?

sendmail 发信问题 linux 邮件服务器

PHP Mail_Mime:如何在电子邮件正文中正确使用 encodeHeader()

解决java mail发送TXT附件被直接显示在正文中的问题