как расшифровать тему в электронном письме? - PullRequest
7 голосов
/ 26 мая 2011

Я отправил письмо со строкой темы как

[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 ]

17 голосов
/ 26 мая 2011

Вероятно, вы ищете 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 голосов
/ 21 марта 2016

У меня тоже была эта проблема, и я предложил альтернативный маршрут, чтобы решить эту проблему.Для тех, кто смотрит в будущее, это может быть полезно.

Я собрал этот код вместе, как только понял, какая часть сообщения на самом деле является частью строки 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()

. Убедитесь, что вы используете регистрозависимые версии строковых функций, поскольку не все почтовые провайдеры придерживаются верхнего или нижнего регистра.Извините, что отвечаю на старый вопрос, но я нашел это более полезной альтернативой.

...