MIM-кодирование строк заголовков писем с Perl, прерванным в 5.26 - PullRequest
0 голосов
/ 31 октября 2018

Мы используем Perl для кодирования правильных строк заголовка письма. В новой версии v5.26.2 мы сталкиваемся со следующей проблемой, упрощенной в несколько строк:

$ cat mime.pl

use strict;
use utf8;
use Encode;

print "$^V", "\n";
my $encoded = Encode::encode('MIME-Q', 'To: Blödmann <guru@sisis.de>');
print "$encoded", "\n";

v5.16.2:

$ /usr/local/sisis-pap/perl5.16.2/bin/perl mime.pl
v5.16.2
To:=?UTF-8?Q?=20Bl=C3=B6dmann=20?=<guru@sisis.de>

v5.26.2:

$ /usr/local/sisis-pap/bin/perl mime.pl
v5.26.2
=?UTF-8?Q?To=3A_Bl=C3=B6dmann_=3Cguru=40sisis=2Ede=3E?=

т.е. в v5.26.2 полная строка кодируется как печатаемая в кавычках (и не будет воспринята sendmail. В v5.16.2 было закодировано только слово «Blödman» с немецким Umlaut UTF-8, сам почтовый адрес был оставлен в покое.

Как это исправить?

1 Ответ

0 голосов
/ 31 октября 2018

Вывод в 5.16.2 не соответствует RFC2822 , и только Perl может проанализировать его обратно в исходный заголовок.

Используйте E-mail :: MIME :: Header :: AddressList вместо:

#!/usr/bin/perl
use warnings;
use strict;
use utf8;

use Email::MIME::Header::AddressList;

my $unicode_addresses = 'Blödmann <guru@sisis.de>, Großmann <guru@example.com>';
my $mime_encoded_addresses = 'Email::MIME::Header::AddressList'
    ->from_string($unicode_addresses)
    ->as_mime_string();

print "To: $mime_encoded_addresses\n";

Выход:

To: =?UTF-8?B?QmzDtmRtYW5u?= <guru@sisis.de>, =?UTF-8?B?R3Jvw59tYW5u?= <guru@example.com>

См. Encode :: MIME :: Header о том, как правильно использовать Encode с MIME- *.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...