我的 PHP 脚本向用户发送电子邮件,当电子邮件到达他们的邮箱时,主题行 ($subject
) 会在末尾添加 a^£
等字符我的主题文本。这显然是编码问题。电子邮件内容本身没有问题,只是主题行损坏了。
我搜索了所有地方,但找不到如何正确编码我的主题。
这是我的标题。请注意,我将 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’s answer .
Content-Type中指定的字符编码只描述了消息体的字符编码,没有描述消息头。您需要使用 encoded-word syntax与 quoted-printable encoding或 Base64 encoding :
encoded-word = "=?" charset "?" encoding "?" encoded-text "?="
您可以使用 imap_8bit
对于 quoted-printable 编码和 base64_encode
对于 Base64 编码:
"Subject: =?UTF-8?B?".base64_encode($subject)."?="
"Subject: =?UTF-8?Q?".imap_8bit($subject)."?="
关于php - 来自 PHP 的电子邮件已破坏主题 header 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4389676/