如何在perl中编码邮件主题?
现在我终于找到了一些东西,但它仍然无效:
use MIME::Words qw/encode_mimewords/;
$recipientsubject = encode_mimewords('Votre fichier a bien été envoyé');
但是(错误的)结果是:
主题:Votre fichier a bien =?ISO-8859-1?Q?= E9t = E9?= =?ISO-8859-1?Q?envoy = E9?=
显示:
Votre fichier abienétéenvoyé
(吃了一些空间)
答案 0 :(得分:16)
使用Encode,它是一个核心模块。
perl -Mutf8 -MEncode -E 'say encode("MIME-Header", "Votre fichier a bien été envoyé")'
...将输出以下任一项:
=?UTF-8?Q?Votre=20fichier=20a=20bien=20?= =?UTF-8?Q?=C3=A9t=C3=A9=20envoy=C3=A9?=
=?UTF-8?B?Vm90cmUgZmljaGllciBhIGJpZW4gw6l0w6kgZW52b3nDqQ==?=
解码:
perl -C -MEncode -E 'say decode("MIME-Header", "=?UTF-8?Q?Votre=20fichier=20a=20bien=20?= =?UTF-8?Q?=C3=A9t=C3=A9=20envoy=C3=A9?=")'
perl -C -MEncode -E 'say decode("MIME-Header", "=?UTF-8?B?Vm90cmUgZmljaGllciBhIGJpZW4gw6l0w6kgZW52b3nDqQ==?=")'
将打印:
Votre fichier a bien été envoyé
如果仍然有相同的结果,则应提供有关Perl环境的更多信息。该版本是一个很好的入门者。
答案 1 :(得分:2)
处理非ASCII字符串的MIME编码的另一个模块是Email::MIME::RFC2047。例如
use strict;
use warnings;
use utf8;
use Email::MIME::RFC2047::Encoder;
use Email::MIME::RFC2047::Decoder;
binmode(STDOUT, ':utf8');
my $encoder = Email::MIME::RFC2047::Encoder->new;
my $encoded = $encoder->encode_text('Votre fichier a bien été envoyé');
print "$encoded\n";
my $decoder = Email::MIME::RFC2047::Decoder->new;
my $decoded = $decoder->decode_text($encoded);
print "$decoded\n";
打印
Votre fichier a bien =?utf-8?Q?=c3=a9t=c3=a9_envoy=c3=a9?=
Votre fichier a bien été envoyé
电子邮件:: MIME :: RFC2047优于编码的一些好处:
披露:我是该模块的作者。