Korrekt enkodieren mit Encode::MIME::Header

27/06/2010 - 13:47 von Peter Velan | Report spam
Hallo,

meine Versuche E-Mail-Header zu enkodieren sind etwas hakelig:

#~~~~~~
use MIME::Entity;
use Encode qw/encode decode/;

my $mail = MIME::Entity->build
( From => 'adr-von'
, To => 'adr-an'
, Subject => encode( 'MIME-Header', 'Jürgen' )
, Type => 'text/plain; charset=UTF-8'
, Encoding => 8bit
, Data => 'à ö ü ß Ä Ö Ü € § ° ² ³'
);

$mail->print;
#~~~~~~

liefert folgenden Header:

X-Mailer: MIME-tools 5.428 (Entity 5.428)
MIME-Version: 1.0
Subject: =?UTF-8?B?SsODwrxyZ2Vu?
Das gibt dann als Betreff: "Jà¼rgen"

Ein Vergleich mit Thunderbird 3.1 liefert mir den Header

User-Agent: [...] Thunderbird/3.1
MIME-Version: 1.0
Subject: =?UTF-8?B?SsO8cmdlbg==?
Hier kommt der Betreff richtig.

- perl v5.10.1
- Quelltext des Perl-Skripts: UTF-8
- Thunderbird-Kodierung in beiden Fàllen: UTF-8

Auch die Versuche die Enkodierung auf 'MIME-Q' oder 'MIME-B' zu
stellen schlugen fehl. Was mach ich falsch?

Freue mich über Tipps,
Gruß Peter
 

Lesen sie die antworten

#1 Peter J. Holzer
27/06/2010 - 15:23 | Warnen spam
On 2010-06-27 11:47, Peter Velan wrote:
meine Versuche E-Mail-Header zu enkodieren sind etwas hakelig:

#~~~~~~
use MIME::Entity;
use Encode qw/encode decode/;



Hier fehlt entweder ein
use utf8;
(empfohlen) oder ein
use encoding 'dein-source-charset';
(zu Wirkungen und Nebenwirkungen befragen Sie Ihren Arzt oder
Apotheker).

Andernfalls weiß Perl nicht, in welchem Encoding der *Source-Code* des
Scripts verfasst ist und kann daher bei Bytes, keinem US-ASCII-Zeichen
zuordenbar sind, wie


my $mail = MIME::Entity->build
( From => 'adr-von'
, To => 'adr-an'
, Subject => encode( 'MIME-Header', 'Jürgen' )


^
hier nur raten. Aus Rückwàrtskompatibilitàtsgründen ràt es, dass die
Bytefolge 27 4a c3 bc 72 67 65 6e 27 (Einfaches Anführungszeichen,
Großes J, unbekanntes Byte C3, unbekanntes Byte BC, kleines r, ...)
dem String "J\x{C3}\x{BC}rgen" entsprechen soll. Das ist hier natürlich
falsch, es sollte "J\x{FC}rgen" sein. Um darauf zu kommen, muss Perl
aber wissen, dass Du Dein Script in UTF-8 kodiert hat, was Du ihm mit
use utf8;
sagst.

Alternativ dazu kannst Du natürlich auch "J\x{FC}rgen" statt 'Jürgen'
schreiben, das ist vom Encoding des Scripts unabhàngig[1].

hp

[1] Außer auf EBCDIC-Systemen, aber die sind m.W. seit 5.10 nicht mehr
supportet.

Ähnliche fragen