如何在电子邮件中解码主题?

时间:2011-05-26 05:08:52

标签: php email base64 mime

我已发送主题为

的邮件

[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]付款方式)

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

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

2 个答案:

答案 0 :(得分:16)

您可能正在寻找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

答案 1 :(得分:0)

我也有这个问题,想出了另一条解决方案。对于任何寻找未来的人来说,这可能会有所帮助。

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

O(log(log n))

有效的是你正在检测字符串是否在face 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; }

解码标识符之前修剪标识符

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

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