在SakMsg.pas中
TSakMsg.Create过程中,初始定义了 FCharSet := ‘ISO-8859-1‘; // you can change this
经测试发现,如果不改CharSet、TextEncoding属性,在mail.sina.com.cn收到的邮件正常的(收发都用sina邮箱),但发现163的邮件则中文部分是乱码。
通过分析发现SakMsg默认用8BIT编码,那么可能是邮件服务之间传输时,由于某个服务器不支持8BIT的传输或解析,导致看起来是乱码,所以直接用Base64来进行编码就可以解决了,于是将
TextEncoding := taBase64; CharSet :=‘utf-8‘;
结果收到的sina和163收到的都是乱码(中文部分),查找了一下,发现编码前没有进行内友转换,于是在FillRawMail过程里,将Body.Text := Text.Text;行替换成
if FCharSet = ‘utf-8‘ then begin
Body.Text := AnsiToUtf8(Text.Text);//邮件正文
Subject := AnsiToUtf8(Subject);//邮件标题
end else begin
Body.Text := Text.Text;
end;
问题解决。