【问题标题】:how to decode the subject in an email?如何解码电子邮件中的主题?
【发布时间】:2011-09-02 07:11:57
【问题描述】:

我已经发送了一封主题行为的邮件

[BILLING #PHY-945-49853]: [Ticket #12622] Payment Method

但在消息的来源中,该行如下所示

Subject: =?UTF-8?B?W1NBTEVTICNCQk4tOTM1LTM3OTE3XTogW1RpY2tldCAjMTI2MjJdIFBheW1lbnQ=?=
=?UTF-8?B?IE1ldGhvZA==?=

它是用 Base64 编码的。如何使用 php 将其解码回英文的原始主题行?我尝试过使用 php base64_decode($subject),但它没有将其解码为原始主题([BILLING #PHY-945-49853]: [Ticket #12622] Payment Method)

我还附上了一封示例电子邮件:

Return-Path: .........
X-Original-To: ..........
Delivered-To: ........
Received: ......
X-DKIM: ........
Received:....
To: ....
Subject: =?UTF-8?B?W1NBTEVTICNCQk4tOTM1LTM3OTE3XTogW1RpY2tldCAjMTI2MjJdIFBheW1lbnQ=?=
=?UTF-8?B?IE1ldGhvZA==?=
From: =?UTF-8?B?U0FWVllFSE9TVElORyBTQUxFUw==?=
X-Priority: ..
X-MSMail-Priority: normal
X-MimeOLE: Produced By Kayako Fusion v4.01.204
X-Mailer: Kayako Fusion v4.01.204
Reply-To: .......
Date: .....
Content-Type: multipart/alternative;
boundary="=_1.64496c432f57488924404b338155a2d7"
MIME-Version: 1.0
Message-Id: ....

这是一条 MIME 格式的消息。如果你看到这个,你的邮件阅读器不支持这种格式。

--=_1.64496c432f57488924404b338155a2d7
Content-Type: text/plain;
charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline


------------------------------------------------------
Support Center:
Content-Type: text/html;
charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

【问题讨论】:

    标签: php email base64 mime


    【解决方案1】:

    我也遇到了这个问题,并想出了一条替代路线来解决这个问题。对于其他展望未来的人来说,这可能会有所帮助。

    当我意识到消息的哪一部分实际上是字符串的 Base64 部分后,我将这段代码拼凑在一起;

    if(stripos($subject, "=?utf-8?b?") !== false) {
        $output = str_ireplace("=?utf-8?B?", "", $subject);
        $output = str_replace("==?=", "", $output);
        $output = base64_decode($output);
    }else{
        $output = $subject;
    }
    

    实际上,您正在做的是检测字符串在 face base64 中。然后在使用base64_decode()解码之前修剪标识符

    确保您使用不区分大小写的字符串函数版本,因为并非所有邮件提供商都使用大写或小写。

    **抱歉回答一个老问题,但我发现这是一个更有用的选择。

    【讨论】:

      【解决方案2】:

      您可能正在寻找iconv_mime_decode

      来自链接:

      string iconv_mime_decode ( string $encoded_header [, int $mode = 0 [, string $charset = 
      ini_get("iconv.internal_encoding") ]] )
      

      解码 MIME 标头字段。

      你的例子:

      echo iconv_mime_decode($string);
      

      产量:

      Subject: [SALES #BBN-935-37917]: [Ticket #12622] Payment
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-16
      • 2011-11-26
      • 1970-01-01
      • 1970-01-01
      • 2012-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多