2016-12-01 3 views
0

я должен отправить электронную почту с Perl, вот код:Темы сообщения со специальной Charaters отправить с Perl

my $msg = MIME::Lite->new(
    From => $tpl->{'from'}, 
    To => $tpl->{'to'}, 
    Subject => $subject_id_site . Encode::encode('MIME-Header',$subject_label). Encode::encode('MIME-Header', $tpl->{'subject'}), 
    ReplyTo => $tpl->{'reply_to'}, 
    Encoding => 'quoted-printable', 
    Type =>'text/html', 
    Data => Encode::encode('utf8',$tpl->{'body'}), 
); 

Если объект содержит специальные символы, например: [300584/Yçàéè@test] subject

здесь является тема электронной почты, которую я получил от Perl-кодирования: [300584/Yçà éè@test] subject.

На самом деле я пробовал с Encode::encode('UTF8',$subject_label), но все хуже.

+0

Есть ли у вас что данные в исходном коде как буквенная строка или являются '$ subject_label' чтений из внешнего источника? – simbabque

+0

@simbadque, да $ subject_label читается из внешнего источника –

+1

Просьба предоставить вывод 'join '|", (map {sprintf ("% vX", $ _)} $ subject_id_site, $ subject_label, $ tpl -> { 'subject'}), $ subject_id_site. Encode :: закодировать ('MIME-заголовка', $ subject_label). Encode :: encode ('MIME-Header', $ tpl -> {'subject'}) ' – ikegami

ответ

0

Тема электронной почты выглядит «дважды закодированной», поэтому я предполагаю, что у вас есть правильная строка utf-8, которая не имеет флага utf-8.

Так добавить:

utf8::decode($subject_label); 

добавить в верхней части кода, а остальное оставьте как есть.

НТН Georg

+0

Если это проблема, лучше пояснить: OP didn ' t декодировать свои входы до кодирования их выходов. – ikegami

+0

Если я правильно закодировал код кодирования, Encode :: _ utf8_on просто устанавливает флаг utf_8 на месте, decode_utf8 копирует строку. Таким образом, вы должны использовать 'Encode :: _ utf8_on ($ subject_label);' или '$ subject_label = Encode :: decode_utf8 ($ subject_label);' –

+0

Действительно, '$ subject_label = Encode :: decode_utf8 ($ subject_label);' было бы правильным использованием. Используйте встроенный 'utf8 :: encode', если вы хотите сделать это на месте. Исправлена. (НИКОГДА НЕ ИСПОЛЬЗУЙТЕ '_utf8_on'.) – ikegami

Смежные вопросы