perl - saber - ver encabezado de correo en hotmail
Decodificar un encabezado de correo electrónico UTF8 (5)
Creo que el módulo Encode maneja eso con la codificación MIME-Header
, así que intente esto:
use Encode qw(decode);
my $decoded = decode("MIME-Header", $encoded);
Tengo un correo electrónico sujeto al formulario:
=?utf-8?B?T3.....?=
El cuerpo del correo electrónico está codificado en utf-8 base64 y se ha decodificado correctamente. Estoy al día usando el módulo Perl''s Email :: MIME para decodificar el correo electrónico.
¿Cuál es el significado del delimitador =? Utf-8 y cómo extraigo información de esta cadena?
Echa un vistazo a RFC2047 . La ''B'' significa que la parte entre los dos últimos '''' '''' está codificada en base64. El ''utf-8'' naturalmente significa que los datos decodificados deben interpretarse como UTF-8.
Esta es una extensión estándar para el etiquetado de encabezados de conjunto de caracteres, especificado en RFC2047 .
Los tokens de encoded-word
(según RFC 2047 ) pueden aparecer en valores de algunos encabezados. Se analizan de la siguiente manera:
=?<charset>?<encoding>?<data>?=
Charset es UTF-8 en este caso, la codificación es B
que significa base64 (la otra opción es Q
que significa Quoted Printable).
Para leerlo, primero decodifique la base64, luego trátela como caracteres UTF-8.
Lea también las distintas RFCs de Internet Mail para obtener más detalles, principalmente RFC 2047 .
Como está utilizando Perl, Encode::MIME::Header podría ser útil:
SINOPSIS
use Encode qw/encode decode/; $utf8 = decode(''MIME-Header'', $header); $header = encode(''MIME-Header'', $utf8);
ABSTRACTO
Este módulo implementa RFC 2047 Mime Header Encoding. Hay 3 variantes de nombres de codificación; MIME-Header, MIME-B y MIME-Q. La diferencia se describe a continuación
decode() encode() MIME-Header Both B and Q =?UTF-8?B?....?= MIME-B B only; Q croaks =?UTF-8?B?....?= MIME-Q Q only; B croaks =?UTF-8?Q?....?=
MIME::Words de MIME-tools también funcionan bien para esto. Me encontré con algún problema con Encode y encontré que MIME :: Words tuvo éxito en algunas cadenas donde Encode no lo hizo.
use MIME::Words qw(:all);
$decoded = decode_mimewords(
''To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <[email protected]>'',
);