PHP 邮件 utf-8 问题

PHP mail utf-8 issues

我正在尝试使用 PHP mail() 函数以 utf-8 编码发送电子邮件。这有一些问题。如:

  1. 如果在 body 的电子邮件中存在 unicode 字符,那么我会收到 header "Content-Type: application/octet-stream" 的电子邮件。 否则,如果没有 unicode 字符,我会得到 Content-Type: text/plain; charset=us-ascii。此行为不依赖于 发送 header Content-Type: text/plain; charset=UTF-8
  2. 如果主题由 utf-8 个编码的字符组成 RFC2047 然后我收到一个像这样的双重编码主题 Subject: =?us-ascii?Q?=3D=3FUTF-8=3FB=3Fw5HClsORwpfDkcKU=3F=3D?=。 而不是预期的 Subject: =?UTF-8?B?w5HClsORwpfDkcKU?=

示例:

$subject = 'іїє';
$body = 'іїє';
$headers = "Content-Type: text/plain; charset=UTF-8\r\n"
    . "MIME-Version: 1.0\r\n";

mail('some-address@gmail.com', mb_encode_mimeheader($subject, 'UTF-8', 'B'), $body, $headers);

这是收到的 header 部分:

Subject: =?us-ascii?Q?=3D=3FUTF-8=3FB=3Fw5HClsORwpfDkcKU=3F=3D?=
User-Agent: Heirloom mailx 12.5 6/20/10
MIME-Version: 1.0
Content-Type: application/octet-stream
Content-Transfer-Encoding: 8bit

С–С—С”

因为服务器上的 MTA 安装了 postfix。 作为使用 gmail 的客户端

电子邮件是一项非常古老、过时且困难的技术。对于字符编码尤其如此。我建议使用库,例如​​ PHPMailer。如果您坚持从头开始,那么真正的答案将超出您的问题范围。浏览器、客户端等使这个问题复杂化。我无法告诉您问题的原因,但解决方案是 PHPMailer。