2011-05-26 110 views
6

我有一個主題行發送電子郵件作爲如何解碼電子郵件中的主題?

[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 

回答

14

您可能正在尋找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 
+0

相關[meta post](http://meta.stackoverflow.com/q/291879/55075)。 – kenorb 2015-05-02 15:01:54

0

我也有這個問題,並想出了一個替代途徑來解決這個問題。對於未來的其他人來說,這可能會有一些幫助。

一旦我意識到消息的哪一部分實際上是字符串的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; 
} 

有效地你正在做的是檢測到該字符串是在面對base64。然後在解碼之前修改標識符base64_decode()

確保您使用字符串函數的不區分大小寫的版本,因爲並非所有郵件提供者都使用大寫或小寫字母。

**對不起回覆一個老問題,但我發現這是一個更有用的選擇。