PHP 邮件 utf-8 问题
PHP mail utf-8 issues
我正在尝试使用 PHP mail() 函数以 utf-8
编码发送电子邮件。这有一些问题。如:
- 如果在 body 的电子邮件中存在 unicode 字符,那么我会收到
header "Content-Type: application/octet-stream" 的电子邮件。
否则,如果没有 unicode 字符,我会得到
Content-Type:
text/plain; charset=us-ascii
。此行为不依赖于
发送 header Content-Type: text/plain; charset=UTF-8
- 如果主题由
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。
我正在尝试使用 PHP mail() 函数以 utf-8
编码发送电子邮件。这有一些问题。如:
- 如果在 body 的电子邮件中存在 unicode 字符,那么我会收到
header "Content-Type: application/octet-stream" 的电子邮件。
否则,如果没有 unicode 字符,我会得到
Content-Type: text/plain; charset=us-ascii
。此行为不依赖于 发送 headerContent-Type: text/plain; charset=UTF-8
- 如果主题由
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。