php - 来自 PHP 的电子邮件已破坏主题 header 编码

标签 php encoding mime email-headers

我的 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";

最佳答案

更新 要获得更实用和最新的答案,请查看 Palec’s answer .


Content-Type中指定的字符编码只描述了消息体的字符编码,没有描述消息头。您需要使用 encoded-word syntaxquoted-printable encodingBase64 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/

相关文章:

php - 用 5 个 php 变量创建一个字符串

c - 如何有效地编码/解码压缩的位置描述?

php - MySQL - 从 PHP 插入日语 - 编码问题

android - 获取图片路径

c# - 使用 MailKit/MimeKit 从电子邮件中删除附件

php - 如何在 WordPress 中将图像添加到自定义主题本身?

require() 阻碍了 PHP 性能

php - 登录和注销后丢失当前本地语言

c# - 将 C# 字符串编码为 Javascript 字符串的注意事项

php - 在 PHP 中检测 MIME 类型