我的PHP脚本向用户发送电子邮件,当电子邮件到达用户的邮箱时,主题行($subject)的字符类似于a^£添加到主题文本的末尾。这显然是编码问题。电子邮件内容本身很好,只是主题行中断了。
$subject
a^£
我已经搜索了一遍,但找不到 如何正确编码主题的方法 。
这是我的标题。请注意,我使用Content-Type同charset=utf-8和 Content-Transfer-Encoding: 8bit。
Content-Type
charset=utf-8
Content-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";
更新 有关更实用和最新的答案,请查看Palec的答案。
Content-Type 中指定的字符编码仅描述消息正文的字符编码,而不描述标题。您需要使用带_引号可打印_或Base64编码的[编码字 语法]
encoded-word = "=?" charset "?" encoding "?" encoded-text "?="
您可以使用imap_8bit带 引号的可打印 编码和base64_encodeBase64编码:
imap_8bit
base64_encode
"Subject: =?UTF-8?B?".base64_encode($subject)."?=" "Subject: =?UTF-8?Q?".imap_8bit($subject)."?="