Apple Mail Client - проблема с декодированием base64 в строке темы

В Apple Mail, когда я отправляю электронное письмо с кодировкой Base64 (из скрипта Perl), клиент Apple Mail не декодирует строку темы, т. е. показывает необработанный текст в кодировке base64.

Итак, когда я отправляю ниже из моего Perl-скрипта:

Subject: =?UTF-8?B?IPCfjLkgVGhlIGVuY2hhbnRpbmcgc291bmR0cmFjayB0byAnQmVhdXR5IEFuZCBUaGUgQ mVhc3Qn
IGlzIG91dCB0b2RheSEg8J+MuQ==
?=

Вместо того, чтобы показывать это: сегодня вышел очаровательный саундтрек к «Красавице и чудовищу»!

Он отображается ниже в строке темы:

=?UTF-8?B?IPCfjLkgVGhlIGVuY2hhbnRpbmcgc291bmR0cmFjayB0byAnQmVhdXR5IEFuZCBUaGUgQm Vhc3Qn
IGlzIG91dCB0b2RheSEg8J+MuQ==
?=

Пожалуйста, подскажите, почему так происходит.

Похоже, это проблема с клиентом Apple Mail, так как одна и та же строка темы отлично работает во всех других почтовых клиентах.

Дайте мне знать, если я пропустил, чтобы объяснить что-нибудь.

С уважением, Амар


person Amar N    schedule 11.05.2017    source источник


Ответы (1)


Если вы используете MIME::Base64 для кодирования строки, он добавляет конечный пробел (по какой-то причине!). Из вашего примера похоже, что ваша функция конвертера добавляет символ новой строки:

Subject: =?UTF-8?B?IPCfjLkgVGhlIGVuY2hhbnRpbmcgc291bmR0cmFjayB0byAnQmVhdXR5IEFuZCBUaGUgQ mVhc3QnIGlzIG91dCB0b2RheSEg8J+MuQ==
?=

... должно быть все в одной строке:

Subject: =?UTF-8?B?IPCfjLkgVGhlIGVuY2hhbnRpbmcgc291bmR0cmFjayB0byAnQmVhdXR5IEFuZCBUaGUgQ mVhc3QnIGlzIG91dCB0b2RheSEg8J+MuQ==?=

Разрыв строки с помощью новой строки или пробела нарушает кодировку и вызывает панику у некоторых клиентов. Это то, что я использую:

## ENCODE SUBJECT
use MIME::Base64;
my $subject_enc = encode_base64($subject);
$subject_enc =~ s/^\s+|\s+$//g; #TRIMS ANY SURROUNDING WHITESPACE
$subject_enc =~ s/^\n+|\n+$//g; #TRIMS ANY NEWLINE CHARACTERS
my $subject_enc = '=?UTF-8?B?' . $subject_enc . '?=';
person Colin R. Turner    schedule 22.04.2018