在SakMsg.pas中
TSakMsg.Create過程中,初始定義了 FCharSet := ‘ISO-8859-1‘; // you can change this
經(jīng)測試發(fā)現(xiàn),如果不改CharSet、TextEncoding屬性,在mail.sina.com.cn收到的郵件正常的(收發(fā)都用sina郵箱),但發(fā)現(xiàn)163的郵件則中文部分是亂碼。
通過分析發(fā)現(xiàn)SakMsg默認用8BIT編碼,那么可能是郵件服務之間傳輸時,由于某個服務器不支持8BIT的傳輸或解析,導致看起來是亂碼,所以直接用Base64來進行編碼就可以解決了,于是將
TextEncoding := taBase64; CharSet :=‘utf-8‘;
結果收到的sina和163收到的都是亂碼(中文部分),查找了一下,發(fā)現(xiàn)編碼前沒有進行內友轉換,于是在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;
問題解決。