D2009下Indy发送邮件中文乱码问题

    发现问题后,试着在网上搜索相关问题,有说是指定字符集idmessage.charset。然而这种方式并不能解决。

    试过用D7写Demo验证,是没问题。D7与D2009字符编码差别在ansi和unicode,故而怀疑Indy在unicode的中文字编码处理上存在问题——可能存在转换时数据丢失。

 

   最后尝试在idmessage正文部分做如下处理:

  idmessage1.CharSet := 'gb2312';
  idmessage1.ContentTransferEncoding := 'base64';//关键是设置编码转换,避免数据丢失


    以上处理,在邮件正文部分可正确显示中文。但是主题中的汉字仍然是乱码,故仿照正文编码转换,最后才正确显示,如下:

var
  ss: string;
begin
  ss:= Format('=?gb2312?B?%s?=', [Encodestring(edit1.Text)]);
  idmessage1.subject := ss;

你可能感兴趣的:(D2009下Indy发送邮件中文乱码问题)