2017-04-20 75 views
2

对于像Administrative ProfessionalsDay®这样的活动发送意愿,我尝试发送邮件给所有邮件提供者给我的用户,并且接收者正确地收到电子邮件主题,除了AOL邮件提供者特殊我们在这里看到的字符(注册符号)没有得到很好的呈现。我使用Perl。部分代码如下。Aol邮件主题特殊字符显示不正确

my $email_subject = _decode_html_entities($q->param('email_subject')); 
my $email_msg = MIME::Lite->new(
      From  => '$frm', 
      To  => $email_to, 
      Subject => '=?utf-8?B?'.encode_base64($email_subject).'?=', 
      Type  => 'text/plain', 
      Encoding => 'base64', 
      Data  => $email_body 
     ); 
     $email_msg->attr("content-type.charset" => 'UTF8'); 
     $email_msg->add('X-Card-Nos' => $uc); 
     $email_msg->add('X-Type'  => 'Test_YearAfter_Reminder'); 
     $email_msg->add('Errors-To' => $error_mail_rec); 

sub _decode_html_entities { 
    my $str = shift; 
    $str =~ s/%([a-f0-9]{2})/chr(hex($1))/egi; 
    return encode_utf8($str); 
} 

其他电子邮件提供商表示邮件主题作为

行政专业人员Day®贺卡

而AOL邮件主题表示主题行

=?UTF-8 2 B 4 QWRtaW5pc3RyYXRpdmUgUHJvZmVzc2lvbmFscyBEYXnCriBlY2FyZHM =?

回答

1

做以下修改:

$email_msg->attr("content-type.charset" => 'UTF-8'); 

无需默认EOL “\ n”:

Subject => '=?utf-8?B?'.encode_base64($email_subject,'').'?=', 

另外,如果你在你的脚本中使用 '使用UTF8' 无需编码为utf8。