我已发送主题为
的邮件
[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
答案 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;
}
确保您使用字符串函数的不区分大小写的版本,因为并非所有邮件提供程序都使用大写或小写。
**很抱歉回答一个旧问题,但我发现这是一个更有用的选择。