在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客户端似乎存在问题,因为同一主题行在所有其他邮件客户端上运行良好。
如果我错过了解释的话,请告诉我。
祝你好运, 阿玛尔
答案 0 :(得分:0)
如果使用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 . '?=';