一尘不染

来自PHP的电子邮件的主题标头编码已损坏

php

我的PHP脚本向用户发送电子邮件,当电子邮件到达用户的邮箱时,主题行($subject)的字符类似于a^£添加到主题文本的末尾。这显然是编码问题。电子邮件内容本身很好,只是主题行中断了。

我已经搜索了一遍,但找不到 如何正确编码主题的方法

这是我的标题。请注意,我使用Content-Typecharset=utf-8Content-Transfer-Encoding: 8bit

//set all necessary headers
$headers = "From: $sender_name<$from>\n";
$headers .= "Reply-To: $sender_name<$from>\n";
$headers .= "X-Sender: $sender_name<$from>\n";
$headers .= "X-Mailer: PHP4\n"; //mailer
$headers .= "X-Priority: 3\n"; //1 UrgentMessage, 3 Normal
$headers .= "MIME-Version: 1.0\n";
$headers .= "X-MSMail-Priority: High\n";
$headers .= "Importance: 3\n";
$headers .= "Date: $date\n";
$headers .= "Delivered-to: $to\n";
$headers .= "Return-Path: $sender_name<$from>\n";
$headers .= "Envelope-from: $sender_name<$from>\n";
$headers .= "Content-Transfer-Encoding: 8bit\n";
$headers .= "Content-Type: text/plain; charset=UTF-8\n";

阅读 209

收藏
2020-05-29

共1个答案

一尘不染

更新 有关更实用和最新的答案,请查看Palec的答案


Content-Type 中指定的字符编码仅描述消息正文的字符编码,而不描述标题。您需要使用带_引号可打印_或Base64编码的[编码字 语法]

encoded-word = "=?" charset "?" encoding "?" encoded-text "?="

您可以使用imap_8bit引号的可打印
编码和base64_encodeBase64编码:

"Subject: =?UTF-8?B?".base64_encode($subject)."?="
"Subject: =?UTF-8?Q?".imap_8bit($subject)."?="
2020-05-29