IdSMTP在Delphi2009中发送邮件乱码
在Delphi2007中运行正确, 发送的Email可以正常显示中文.
但当然把Delphi升级为2009之后, 无论如何发送的邮件中只要是中文就变成乱码.
似乎是Delphi中的String默认为WideString的问题,
但我也试过在调用IdSMTP.send之,设定相关的变量为AnsiString,结果依然是乱码.
有人可以帮忙研究一下吗?
环境: CodeGear? Delphi® 2009 Architect , Indy 10.2.3
类代码如下:
unit TccMail;interfaceuses Forms,Sysutils, Classes,IdSMTP, IdMessage,TccUtils;Type TTccMail=Class(TObject) private FSmtp: TIdSMTP; FMsg: TIdMessage; FToList: String; FSubject: String; FBodys: TStrings; procedure SetSubject(const Value: String); procedure SetToList(const Value: String); procedure TccMailFailedRecipient(Sender: TObject; const AAddress, ACode, AText: String; var VContinue: Boolean); public constructor Create; destructor Destroy; override; property ToList: String read FToList write SetToList; property Subject: String read FSubject write SetSubject; property Bodys: TStrings read FBodys; function Send: boolean; procedure Clear;end;implementation{ TTccMail }procedure TTccMail.Clear;begin FToList:=''; FSubject:=''; FBodys.Clear;end;constructor TTccMail.Create;begin FSmtp:=TIdSMTP.Create(nil); FMsg:=TIdMessage.Create(nil); FBodys:=TStringList.Create;end;destructor TTccMail.Destroy;begin FSmtp.Free; FMsg.Free; FreeAndNil(FBodys); inherited;end;function TTccMail.Send: boolean;begin if FToList='' then raise exception.Create('Empty Recepients'); FSmtp.Host := '********************'; FSmtp.Username := '********'; FSmtp.Password := '********'; FMsg.CharSet := 'GB2312'; FMsg.ContentType := 'text/html'; FMsg.Encoding:=meMIME; FMsg.From.Name := 'SYSTEM_CN'; FMsg.From.Address := '************'; FMsg.Date:=Now-8/24; FMsg.Subject := Subject; FMsg.Body.AddStrings(Bodys); FMsg.Recipients.EMailAddresses := ToList; FSmtp.Connect; FSmtp.Send(FMsg); FSmtp.Disconnect; ToList:=''; Subject:=''; Bodys.Clear; result:=true;end;procedure TTccMail.SetSubject(const Value: String);begin FSubject := Value;end;procedure TTccMail.SetToList(const Value: String);begin FToList := Value;end;end.function SendMail(ToList,Subject: String; Bodys: TStrings):boolean;var TccMail: TTccMail;begin TccMail:=TTccMail.Create; try TccMail.ToList := ToList; TccMail.Subject := Subject; TccMail.Bodys.AddStrings(Bodys); Result:=TccMail.Send; finally TccMail.Free; end;end;function SendMail(ToList,Subject: AnsiString; Body: AnsiString):boolean;var TccMail:TTccMail;begin TccMail:=TTccMail.Create; try TccMail.ToList := ToList; TccMail.Subject := Subject; TccMail.Bodys.Add(Body); Result:=TccMail.Send; finally TccMail.Free; end;end;