如何在perl中编码邮件主题?

Den*_*HER 5 email perl encoding subject utf-8

如何在perl中编码邮件主题?

现在我终于找到了一些东西,但它仍然无效:

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

但(错误的)结果是:

主题:Votre fichier a bien =?ISO-8859-1?Q?= E9t = E9?= =?ISO-8859-1?Q?envoy = E9?=

哪个显示:

Votre fichier abienétéenvoyé

(吃了一些空间)

mat*_*ull 16

使用Encode,它是一个核心模块.

perl -Mutf8 -MEncode -E 'say encode("MIME-Header", "Votre fichier a bien été envoyé")'
Run Code Online (Sandbox Code Playgroud)

...将输出以下任一项:

=?UTF-8?Q?Votre=20fichier=20a=20bien=20?= =?UTF-8?Q?=C3=A9t=C3=A9=20envoy=C3=A9?=
=?UTF-8?B?Vm90cmUgZmljaGllciBhIGJpZW4gw6l0w6kgZW52b3nDqQ==?=
Run Code Online (Sandbox Code Playgroud)

并解码:

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==?=")'
Run Code Online (Sandbox Code Playgroud)

哪个会打印:

Votre fichier a bien été envoyé
Run Code Online (Sandbox Code Playgroud)

如果仍然具有相同的结果,则应提供有关Perl环境的更多信息.该版本是一个很好的首发.

  • 迂腐:使用`decode`除非有相反的具体原因,最好使用`MIME-Header`,因为它可以处理MIME Q和B编码.[RFC 2047](http://www.ietf.org/rfc/rfc2047.txt)声明"声称识别'编码字的邮件阅读器必须能够接受它支持的任何字符集的编码." (4认同)