在Delphi2007中运行正确, 发送的Email可以正常显示中文.
但当然把Delphi升级为2009之后, 无论如何发送的邮件中只要是中文就变成乱码.似乎是Delphi中的String默认为WideString的问题,
但我也试过在调用IdSMTP.send之,设定相关的变量为AnsiString,结果依然是乱码.有人可以帮忙研究一下吗?环境: CodeGear™ Delphi® 2009 Architect , Indy 10.2.3类代码如下:unit TccMail;interface
uses
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.
调用方式,一种用默认的String,一种是指明为AnsiString,结果依然是乱码: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;
但当然把Delphi升级为2009之后, 无论如何发送的邮件中只要是中文就变成乱码.似乎是Delphi中的String默认为WideString的问题,
但我也试过在调用IdSMTP.send之,设定相关的变量为AnsiString,结果依然是乱码.有人可以帮忙研究一下吗?环境: CodeGear™ Delphi® 2009 Architect , Indy 10.2.3类代码如下:unit TccMail;interface
uses
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.
调用方式,一种用默认的String,一种是指明为AnsiString,结果依然是乱码: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;
解决方案 »
- 现金1百元求读取自己QQ群号码的DELPHI源码
- delphi前景咋樣啊!!!!!!!我剛找了個delphi的工作!!!
- 关于Tfield[].onGettext事件的问题?
- 如何把TreeView放入ListView来显示
- 急啊急,我在登陆不能实现验证不通过的时候关闭程序
- 如何取得窗口?
- 如何用Tmaskedit控件限定输入格式为G-121形式?(在线)
- 菜鸟诚邀高手讨论有关数据库问题,凡是发表观点者均赠5分以上,精辟者50分以上,分不够再加
- 请各位大哥帮我看看这个问题,LED (显示文字或图片的那个幕布是什么啊)
- 动态生成的bmp图怎么在image控件中显示?
- 如何使窗体在桌面之上,桌面图标之下显示运行(delphi)
- 怎么把文本文件的内容导入到dbgrid中
你改一下 试试
而WideChar和WideString对应的就是Unicode码
建议还是用D7
2009刚出来 有的东西还得实践来检验
D7挺成熟的啊
我把它改为AnsiString就是想要模仿为D2007中的String. (D2007和D7的String与AnsiString是等价的.)问题没有解决,继续等~~......