2016-12-01 85 views
0

我要送用Perl電子郵件,這裏給的是代碼:電子郵件主題用特殊的字符用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。編碼::編碼( 'MIME標頭',$ subject_label)。 Encode :: encode('MIME-Header',$ tpl - > {'subject'})' – ikegami

回答

0

電子郵件主題看起來是「兩次編碼」,所以我的猜測是你有一個正確的utf-8字符串,它沒有utf-8標誌。

所以加:

utf8::decode($subject_label); 

添加代碼的頂部,並留下其餘不變。

HTH 喬治

+0

如果這是問題,更好的解釋是:OP沒有' t在對輸出進行編碼之前解碼其輸入。 – ikegami

+0

如果我正確地得到了Encode-Package代碼,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

相關問題