如何编码在Perl邮件主题?(How to encode mail subject in perl?

2019-07-31 00:43发布

如何编码在Perl邮件主题?

现在我终于找到了,但它仍然没有工作:

use MIME::Words qw/encode_mimewords/;
$recipientsubject = encode_mimewords('Votre fichier a bien été envoyé');

但是,(窃听)的结果是:

主题:您的文件= ISO-8859-1 e9t Q = = = = E9 ISO-8859-1发送Q = E9 = ????????

其中显示:

您的档案有étéenvoyé

(它吃一些空格)

Answer 1:

使用编码 ,这是一个核心模块。

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环境的更多信息。 该版本是一个很好的入门。



Answer 2:

它处理非ASCII字符串的MIME编码另一个模块是电子邮件:: 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在编码:

  • 它力图也由短语使用引号的字符串使用MIME编码为几句话越好。
  • 它支持在要使用的,从MIME短语或抄送标题(不可能与编码)的正确解码。
  • 它支持其他字符集不是UTF-8。
  • 如在MIME-Q编码字下划线它编码空间。
  • 它具有比编码的错误少(没有,我所知道的)。

披露:我是模块的作者。



文章来源: How to encode mail subject in perl?