当前位置: 首页 > 面试题库 >

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

卫兴邦
2023-03-14
问题内容

我的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的答案。

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)."?="


 类似资料:
  • 问题内容: 发送电子邮件时,我遇到一些外来字符的麻烦。有人可以建议我该怎么做吗?我怀疑问题可能是三件事之一。 html页面编码不正确。(这会影响表单中的POST数据吗?) 邮件功能没有任何编码。因此,该程序不知道如何读取它。(最有可能的) 文件本身没有正确的编码,因此出现了问题。(可能不太可能) 还有其他可能的原因吗? 我试图将它们一一淘汰,直到发现问题。我认为选项2是最可能的原因。如何为邮件功能

  • 问题内容: 我有一个这样的字符串: 我想以正确的UTF-8编码获取文件名。在Maven Central的某处是否有一个库方法可以为我执行此解码,还是我需要测试模式并手动解码base64? 问题答案: 在MIME术语中,那些编码的块称为编码字。看看在JavaMail的。该方法将解码字符串中的所有编码词。 你可以用

  • 我希望管理电子邮件的电子邮件主题行根据产品类别进行更改。我看过所有类似的堆栈溢出问题,但没有一个适用于Woocommerce3.8.0(参见这个和这个)。 我有的是这个 我的代码只是返回新订单的默认电子邮件主题行(在woocommerce/settings/email中设置)。我想不通为什么我的函数不能识别类别名称。 谁能告诉我我的代码出了什么问题吗? 我将这段代码放在我的child-theme/

  • 我试着设置一封电子邮件。html和一个动作。php,以便有人可以从网站发送电子邮件。这是电子邮件中的代码。html 在行动中。我有 在电子邮件中输入的信息。html已成功加载到操作中。php,但我的Outlook收件箱中没有收到来自电子邮件方法的任何内容。我错过什么了吗?

  • 我已经从CodeIgniter发送了一封电子邮件,但我不知道为什么我的电子邮件会被截断,或者它会被包含在带有问号的黑钻石中。这是真的,我使用波斯字符,但标题是utf-8无论如何。下面是发送电子邮件的CodeIgniter代码: 只要注意主题中的非拉丁字符:

  • 申请工作需要发送一封电子邮件,其中包含一些详细信息,如姓名、电话号码、电子邮件、当前ctc etcc...电子邮件发送正确,但问题是在主题行发送电子邮件时,我需要包括姓名电子邮件ctc...为此,我已经这样做了,但它不接受这种格式。