代码如下
  smtp := TidSmtp.Create(nil);
  msg := TidMessage.Create(nil);  smtp.AuthenticationType := Atlogin;
  smtp.Host := 'szmail.gmcc.net';
  smtp.UserID := 'xxx';
  smtp.Password := 'xxxxxx'
  msg.Subject := ASubJect;
  msg.From.Text := Afrom;
  msg.Recipients.EMailAddresses := Ato;
  msg.CCList.EMailAddresses := Acc;  AText := TidText.Create(msg.MessageParts);
  AText.Body.AddStrings(ABody); // AText.ContentTransfer := '8bit';  AText1 := TidText.Create(msg.MessageParts); //TidText必须大于1,所以加了一个空的  Att := TidAttachment.Create(msg.MessageParts);
  Att.FileName := AttFileName.Strings[i];  smtp.Connect;
  smtp.Send(msg);
  smtp.Disconnect;主题没问题,但是内容出现乱码如下
 =?GB2312?B?2Li008q8/qOh?=
Cc: =?GB2312?B?zfXUxrfJ?= <[email protected]>
Content-Type: multipart/alternative; boundary="=_NextPart_2rfkindysadvnqw3nerasdf";
MIME-Version: 1.0
Date: Thu, 13 Jan 2005 17:45:53 +0800
X-Priority: 3
X-Library: Indy 8.0.25This is a multi-part message in MIME format--=_NextPart_2rfkindysadvnqw3nerasdf
Content-Type: text/plain
Content-Transfer-Encoding: quoted-printable=D3=D0=C8=CE=CE=F1=C5=C9=B5=A5=D0=E8=D2=AA=B4=A6=C0=ED=A1=A3
=CA=B1=BC=E4=A3=BA    2005-1-13 17:45:49
=C5=C9=B5=A5=BA=C5=A3=BA  2005-01-13-023
=CD=EA=B3=C9=C6=DA=CF=DE=A3=BA2005-1-18
=C8=CE=CE=F1=C3=E8=CA=F6=A3=BA=C8=CE=CE=F1=C5=C9=B5=A5=B2=E2=CA=D4=A3=AC=C7=EB=BB=D8=B8=B4=D3=CA=BC=FE=A3=A1--=_NextPart_2rfkindysadvnqw3nerasdf
Content-Type: text/plain
Content-Transfer-Encoding: quoted-printable
--=_NextPart_2rfkindysadvnqw3nerasdf--请问如何是好??

解决方案 »

  1.   

    转贴这篇文章,不知道对你有用吗?
    ================================================================================
    常用邮件编码及乱码的解决--------------------------------------------------------------------------------
    http://tech.sina.com.cn 2001/02/28 15:04 中国电脑教育报 徐济仁、陈家松
      E-mail是Internet上使用的一项服务,它通过数字化的方式进行信件的传送。E-mail的实现方式为:发送方将邮件发至对方主机(或就近主机),然后由主机经过一定的传送路径转发至指定的接收方主机上存储,再由接收方收取阅读,是一种非交互式的存储转发技术。该过程中使用了多种技术协议,才保证邮件的正确无误地传递,如果使用中双方基于不同的邮件协议,就可能会造成邮件中出现乱码的情况。  SMTP(Simple Message Transfer Protocol)简单邮件传输协议,是基于TCP/IP网络的协议,描述了一个邮件报文的格式及当它们传输时如何处理这些报文,是一种利用网络交换文字信息的非交互式技术,用于主机之间的电子邮件交换。利用SMTP,Internet的主机就可收发由普通西文字符组成的文本邮件。  为了传送声音、图像等多媒体二进制数据,还必须将这些数据经过特殊的非字符编码,于是,就出现了MIME(Multipurpose Internet Mail Extension protocol)多用途的网际邮件扩充协议,该系统可以处理常规的报文(普通西文文本)和声像等二进制数据。MIME有Base64和QP(Quote-Printable)两种编码方式。Base64是一种通用的方法:把3个Byte的数据用4个Byte表示,这样,这4个Byte中,实际用到的都只有前面6个bit,这样就不存在只能传输7个bit的字符问题了;QP方式:把一个8bit的字符用两个16进制数值表示,然后在前面加“K”。所以我们有时在收到的邮件中会看到经过QP编码后的文件内容为:KB3KC2KBFKA1KC7KE5KA3KACKC4KFAKBAKC3KA3KA1等。  最早处理二进制数据的编码为Uuencode,是Unix系统的UU编码方式,其解码为Undecode,它们作为Unix系统主机之间的拷贝协议UUCP的一部分开发出来。  我们知道,ASCII编码为7位有效码,而非ASCII的如汉字则采用双字节表达一个汉字,通过字节最高位b7置1来实现。但由于历史形成的原因,Internet上电子邮件主要处理7bit文本,而且一些服务器或网关可能限制8bit传输,这对ASCII字符不会影响;其它非ASCII数据,则必须使用7bit将邮件编码后再发送,否则邮件在传送过程中,如果其最高位被过滤掉,则必然为乱码,而且该邮件的接收方也是无法还原的。由于祖国大陆和港台地区对汉字编码的不统一,祖国大陆使用GB码,港台使用Big5码,这样就造成使用对方交换信息时出现乱码,只有通过将对方内码转换后,才能正确显示。  我们在上网使用Outlook Express收发电子邮件时,经常需使用到各种编码的文字,主要有简体中文的GB2312码和HZ码(使用频率比较高的两种编码),以及通用字符UTF-7和UTF-8、西欧字符等,如果电子邮件软件中没有内置BIG5编码,那收到BIG5编码的电子邮件时就会出现乱码,在电子邮件传输过程中,可能会发生误码或出现乱码,电子邮件传送的内容我们就无法认识。现在有很多软件可以解决这个问题,其中乱码察看器就是其中功能比较强的一个。  乱码察看器支持MIME/Base64、Quoted-Printable、HZ和UUCode四种形式的编码和解码,有改进的混合乱码识别算法(多种乱码混合在一起时可以正确识别不同乱码),单键解码功能:只要选中需要查看的乱码文本(如果不选中任何内容,则会自动全选),然后按下预先设定的热键(默认为F7),配合改进的识别算法,就可以较好地将这些乱码转换成正常的文本内容,自动识别BIG5码(将BIG5码转成GB码)繁体中文和简体中文相互转换(Windows2000下使用更方便)、实时监视剪贴板自动解码、智能弹出等,此外,还可以更改背景颜色及默认字体及其他一些新增功能:V2.60版中新增了某些HTML对中文进行编码所形成乱码的识别和支持;修正了程序运行时Windows无法关机的问题;修正了一些小Bug。  乱码察看器V2.60的下载地址:  go5.163.com
      

  2.   

    -----------------------------------------------------------------------------------------------------------------------
            E-mail编码主要有:  

            1.UU编码  
            在早期传送非 ASCII码的文件时,最常用的便是这种UU(Unix-to-Unix encoding)编码方式。
          Uuencode和Uudecode分别是Unix系统中使用的UU编码和解码程序,后来被改写成为在DOS中亦可执行
          的程序。  

            2.MIME编码  
            UU编码解决了E-mail传送非ASCII文件的问题,但这种方式并不方便。因而又发展出一种新的编
          码标准MIME(Multipurpose Internet Mail Extentions),一般译作“多媒体邮件传送模式”。顾名
          思义,它可以传送多媒体文件,在一封电子邮件中附加各种格式文件一起送出。 
            MIME定义两种编码方式:Base64与QP(Quote-Printable)。QP的规则是对于资料中的7位无须重复
          编码,仅将8位的数据转成7位。   
            QP编码适用于非ASCII码的文字内容,例如我们的中文文件。而Base64的编码规则,是将整个文
          件重新编码成7位,通常用于传送二进制文件。编码的方式不同会影响编码之后的文件大小。而具有   
            MIME功能的E-mail软件大都能自动判别你的邮件是采用何种编码,然后自动选择用QP或Base64
          来解码。  
            MIME标准现已成为Internet电子邮件的主流。现在最常使用的电子邮件软件Eudora、FoxMail、
          Netscape Mail、Outlook Express和Internet Mail等都支持MIME编码标准。   

            3.Binhex编码 
            Binhex的编码方式常用于Mac机器。一般PC上的电子邮件软件,亦多数支持MIME的规格,很少有支
          持Binhex格式的。在常用的电子邮件软件中,只有Eudora具有这种功能,可直接解读Binhex的编码。 -----------------------------------------------------------------------------------------------------------------------收到的邮件是乱码该怎么办 汉字邮件出现乱码的原因很多,主要的原因是Internet上的某些邮件主机不支持8位(非ASCII码格式)传输,以及不同的邮件编码、不同设置的电子邮件接收软件、不同语种的操作系统等不兼容所致。
    当你收到一封乱码的邮件时,应根据邮件内容中的关键字符,判别其编码方法。不同的乱码,在不同的平台上有不同的解决办法,因此解码前必须先看一下文件的内容,根据特征对文件可能的编码方式(Uuencode\Base64encode\QP-encode或其他编码方式)对症下药。 
    Uuencode乱码 此种编乱码的特点是:在乱码前面含有“begin ***”,后面紧接着编码之前原始文件的名称。接着是已经Uuencode编码的邮件的内容。在乱码内容后面,即最后一行为
    “end”。如果你的电子邮件接收程序不支持UU解码,那么你看到的就是这些Uuencode乱码。
    解决Uuencode乱码的办法:将Uuencode乱码邮件转寄到自己的邮箱中,再使用能支持UU解码的电子邮件接受程序(如Eudora、OutLook Express等)来接收该邮件;或者将Uuencode乱码存入文本文件,改文件名后缀为UUE,然后使用Winzip解码;或者将Uuencode乱码存入一个文件,然后在DOS下用uudecode.exe程序将文件解码或在Windows下用Wincode解码。Wincode除支持UU解码外也支持MIME\Binhex等解码格式,应用颇为广泛。Base64 encode乱码 在Base64编码前一般有如下几部分“信头”:Content-Type(内容类型)、charest(字符集)及Content-Transfeer-Encoding(内容传输编码方式)。如果你的电子邮件接收程序不支持Base64解码,那么你看到的就是这些Base64 encode乱码。
    解决Base64 encode乱码的办法:将Base64 encode乱码邮件存成一个文本文件 ,改文件名后缀为.UUE,然后使用Winzip解码;或者将文件后缀改为.eml,由OutLook Express打开,就可以自动解码。QP-encode乱码 采用这种编码方式的邮件很容易进行判别,因为它的内容通常有很多等号。如果你的电子邮件接收程序不支持QP解码,那么你看到的就是这些QP-encode乱码。
    解决QP-encode乱码的办法:将QP-encode乱码邮件转寄到自己的邮箱中,再使用能支持QP解码的电子邮件接受程序(如Netscape mail、Eudora、OutLook Express、Becky等)来接收该邮件;或用Winzip对Quoted-printable解码。必须注意:在邮件信头检查、添加这样两行内容:Mime-Version:1.0Content-Transfer-Encoding:quoted-printable;信头中间不用空行,信头和信体之间要有一个空行。这样形成的文件,改后缀名为UUE,既可双击启动Winzip得到解码。HZ中文乱码 解决办法:在撰写邮件窗口中,选择“格式”菜单下的“语言”命令,并选中“简体中文(GB2312)”项,然后发送邮件。如果您使用Outlook Express,可以打开“查看”菜单点击“语言”选项中的“简体中文(GB2312)”项。如果您使用Eudora之类的软件,可以使用“南极星”、“两岸通”之类的软件,自动转换成不同的汉字编码。如果还看不出到的话,可以将这些编码文本copy到一个文本编辑器中。
    半个汉字乱码 由于很多英文编辑软件以字符为单位来处理文本,汉字被删除一半后,剩余的部分会和相邻的汉字重新组合,使得文本面目全非。因此,除了在输入、删除的时候注意这种问题外,还要注意不要在英文字处理软件中轻易使用“字符替换”功能,这往往会把一个汉字的后一个字符和相邻汉字前一个字符当成一个汉字被替换掉。
    解决办法:对于这种乱码,只要被乱码邮件存成一个文本文件,然后使用以字符为单位的编
    辑软件,将乱码行的首字符删除,后面的部分就会和相邻的乱码重新组合成可识别的汉字。如果上述方法不能奏效,那么只好告诉对方正确的发送方式,请对方重新发一份邮件给你。(寄邮件时最好选用附件的形式)
     
      

  3.   

    刚刚测试结果,如果主题SUBJECT超过22个中文字,就出现乱码现象,小于22个中文字,则显示正常!
    请高手指点
      

  4.   

    确切说是
    如果主题SUBJECT超过45个Byte,就出现乱码现象,小于45个Byte,则显示正常!
    如何避免乱码呢?