2012-04-01 5 views
4

Ich verwende Mail :: IMAPClient, um Mail-Header von einem IMAP-Server abzurufen. Es funktioniert großartig. Aber wenn der Header enthält alle Zeichen andere, dass [az | AZ | 0-9] Ich bin mit Streichern serviert, die wie folgt aussehen:Worin ist diese Perl-Zeichenfolge codiert?

  • Betreff: Un Nachricht en = UTF-8 B ZnJhbsOnYWlzIMOgIGxhIGNvbg?? ? == = (Original-String: "Un Nachricht en français à la con")

  • Körper: = C3 = A9aeio = C3 = B9 = C3 = A8 = C3 = A8 (Original-String: éaeioùèè)

    1. Was ist dieses seltsame Format? Ist das das berühmte "Perl String interne" Format?
    2. Was ist der sicherste Weg, menschliche Idiome von IMAP-Servern zu behandeln?
+0

Wenn Sie planen, mit E-Mails irgendetwas zu tun, sollten Sie zumindest eine grundlegende Vertrautheit mit MIME erwerben. – tripleee

Antwort

14

Die Körpercodierung ist Quoted-Printable; die Kopf- (Subjekt-) Codierung ist MIME- "codiertes Wort" -Codierung ("B" -Typ für Base64). Der beste Weg, um mit beiden umzugehen, besteht darin, die E-Mail in ein Modul zu geben, das mit MIME umgehen kann, wie Email::MIME oder das ältere und buggere MIME::Lite.

Zum Beispiel:

# $message was retrieved from IMAP 
my $mime = Email::MIME->new($message); 
my $subject = $mime->header('Subject'); # automatically decoded 
my $body = $mime->body_str; # also automatically decoded 

Allerdings, wenn Sie mit ihnen außerhalb des Kontexts einer ganzen Nachricht befassen müssen, gibt es auch Module wie Encode::MIME::Header und MIME::QuotedPrint.

7

Es ist quoted-printable codiert. Es ist eine Standardcodierung, die in E-Mails verwendet wird. Es hat nichts mit dem internen String-Format von Perl zu tun.