2011-05-26 14 views
6

que tienen enviar un correo electrónico con el asunto comocómo decodificar el tema en un correo electrónico?

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

Pero en el origen del mensaje de la línea es como a continuación

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

Está codificado en Base64 . ¿Cómo puedo decodificarlo de vuelta a la línea de asunto original en inglés usando php? Lo he intentado con el php base64_decode($subject) pero no lo decodifica al asunto original ([FACTURACIÓN # PHY-945-49853]: [Boleto # 12622] Método de pago)

Adjunto también un mensaje de correo electrónico de muestra:

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: .... 

Este es un mensaje en formato MIME. Si ve esto, su lector de correo no admite este formato.

--=_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 

Respuesta

14

Probablemente estés buscando iconv_mime_decode.

Desde el enlace:

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

descodifica un campo de cabecera MIME.

Su ejemplo:

echo iconv_mime_decode($string); 

Rendimiento:

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

Relacionados [meta post] (http://meta.stackoverflow.com/q/291879/55075). – kenorb

0

También tuve este problema y se acercó con una ruta alternativa para resolver esto. Para cualquier persona que busque en el futuro, esto puede ser de alguna ayuda.

He reconstruido este código una vez que me di cuenta de qué parte del mensaje es en realidad la parte Base64 de la cadena;

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; 
} 

Efectivamente, lo que está haciendo es detectar que la cadena está en la base de la cara64. y luego recortar los identificadores antes de decodificarlo con base64_decode()

Asegúrese de utilizar las versiones de las funciones de cadena que no distinguen entre mayúsculas y minúsculas, ya que no todos los proveedores de correo se adhieren con mayúsculas o minúsculas.

** Lamento responder a una pregunta anterior, pero encontré esta una alternativa más útil.

Cuestiones relacionadas