Perl email fejléc kódolása

Üdv Mindenkinek.

Segítsetek pls...van egy cgi scriptem ami elkészíti a kimenő email fejlécének From és Subject mezőjét.
Ez a kis script működött is ISO kódolás alatt.
Most ugyanezt kellene megvalósítanom UTF-8 -al és ciril betűkkel.
A probléma, hogy a script valamit elszúr és rossz lesz az adott mező.
Olyan mintha a sorok tördelésekkor rontana, mert ha nem csapom le őket 76 karater alá hanem egybe kiküldöm akkor teljesen jó, csakhát néhány mail szerver dobja az ilyet.


sub my_encode_base64 {
my $res = "";
my $eol = "\n";
pos($_[0]) = 0;
while ($_[0] =~ /(.{1,45})/gs) {
$res .= substr(pack('u', $1), 1);
chop($res);
}
my $encoding=$_[1];
$res =~ tr#` -_#AA-Za-z0-9+/#;
### Fix padding at the end:
my $padding = (3 - length($_[0]) % 3) % 3;
$res =~ s/.{$padding}$/'=' x $padding/e if $padding;
### Break encoded string into lines of no more than 76 characters each:
$res =~ s/(.{1,50})/$1$eol/g if (length $eol);
my @res=split(/\n/,$res);
@res=map{"=?$encoding?B?$_?="}@res;
return join("\n",@res);
}

Hozzászólások

Én megnézném ezt:

http://search.cpan.org/~dankogai/Encode-2.35/lib/Encode/MIME/Header.pm

"When you encode, it just encodes UTF-8 string with X encoding then quoted with =?UTF-8?X?....?= . The parts that RFC 2047 forbids to encode are left as is and long lines are folded within 76 bytes per line."

teszt:


use Encode qw/encode decode/;

use encoding cp1250;
binmode STDOUT, ':encoding(cp852)'; 

print $szoveg = "öüóőúéáűí ÖÜÓŐÚÉÁŰÍ "x10, "\n\n";

print $kodolt = encode( 'MIME-Header', $szoveg ), "\n\n";
print           decode( 'MIME-Header', $kodolt ), "\n\n";

Ilyen lesz a kódolt szöveg:


 =?UTF-8?B?w7bDvMOzxZHDusOpw6HFscOtIMOWw5zDk8WQw5rDicOBxbDDjSDDtsO8w7PFkQ==?=
 =?UTF-8?B?w7rDqcOhxbHDrSDDlsOcw5PFkMOaw4nDgcWww40gw7bDvMOzxZHDusOpw6HFsQ==?=
 =?UTF-8?B?w60gw5bDnMOTxZDDmsOJw4HFsMONIMO2w7zDs8WRw7rDqcOhxbHDrSDDlsOcw5M=?=
 =?UTF-8?B?xZDDmsOJw4HFsMONIMO2w7zDs8WRw7rDqcOhxbHDrSDDlsOcw5PFkMOaw4nDgQ==?=
 =?UTF-8?B?xbDDjSDDtsO8w7PFkcO6w6nDocWxw60gw5bDnMOTxZDDmsOJw4HFsMONIMO2w7w=?=
 =?UTF-8?B?w7PFkcO6w6nDocWxw60gw5bDnMOTxZDDmsOJw4HFsMONIMO2w7zDs8WRw7rDqQ==?=
 =?UTF-8?B?w6HFscOtIMOWw5zDk8WQw5rDicOBxbDDjSDDtsO8w7PFkcO6w6nDocWxw60gw5Y=?=
 =?UTF-8?B?w5zDk8WQw5rDicOBxbDDjSDDtsO8w7PFkcO6w6nDocWxw60gw5bDnMOTxZDDmg==?=
 =?UTF-8?B?w4nDgcWww40g?=