首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

Nmsmtp发邮件乱码,该怎么处理

2012-03-14 
Nmsmtp发邮件乱码我用Nmsmtp1做的发邮件工具,发出去后是乱码,我试了几个服务器,比如163,SINA,都是邮件正文

Nmsmtp发邮件乱码
我用Nmsmtp1做的发邮件工具,发出去后是乱码,我试了几个服务器,比如163,SINA,都是邮件正文都是乱码,发一个字都是乱码。求助啊

[解决办法]
懒得帮楼主找原因了
下面是我用idSMTP, idMessage作的邮件发邮件的工具,这个没乱码的。
unit Login;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, jpeg, IdMessage, IdBaseComponent,
IdComponent, IdTCPConnection, IdTCPClient, IdMessageClient, IdSMTP,
ComCtrls, Buttons;

type
TFormmail = class(TForm)
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
HostPort: TEdit;
Label3: TLabel;
EditUser: TEdit;
Label4: TLabel;
EditPass: TEdit;
GroupBox2: TGroupBox;
Label5: TLabel;
EditFrom: TEdit;
Label6: TLabel;
EditTo: TEdit;
GroupBox3: TGroupBox;
Label7: TLabel;
EditSubject: TEdit;
Label8: TLabel;
MemoMesg: TMemo;
AttachAdd: TButton;
AttachmentList: TListBox;
BtnSend: TButton;
IdSMTP: TIdSMTP;
MailMessage: TIdMessage;
AddAttachDlg: TOpenDialog;
HostName: TComboBox;
StatusBar1: TStatusBar;
SpeedButton1: TSpeedButton;
procedure BtnSendClick(Sender: TObject);
procedure IdSMTPConnected(Sender: TObject);
procedure IdSMTPDisconnected(Sender: TObject);
procedure IdSMTPWork(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
procedure IdSMTPWorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer);
procedure IdSMTPWorkEnd(Sender: TObject; AWorkMode: TWorkMode);
procedure AttachAddClick(Sender: TObject);
procedure FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Formmail: TFormmail;

implementation

{$R *.dfm}

procedure TFormmail.BtnSendClick(Sender: TObject);
begin
//1:对所必需的信息进行检验
//校验服务器属性是否为空
if(Trim(HostName.Text)= ' ')or(Trim(HostPort.Text)= ' ')then
begin
showMessage( '请输入所要连接的SMTP服务器属性! ');
HostPort.Text:= '25 ';
HostName.SetFocus;
Exit;
end;
//校验地址信息是否为空
if(Trim(EditFrom.Text)= ' ')or(Trim(EditTo.Text)= ' ')then
begin
showMessage( '请输入收信人地址或发信人地址! ');
EditFrom.SetFocus;
Exit;
end;
//检验用户帐号为否为空
if(Trim(EditUser.Text)= ' ')or(Trim(EditPass.Text)= ' ')then
begin
showMessage( '请正确输入用户登录帐号和密码! ');
EditUser.SetFocus;
Exit;
end;
//2:构造邮件
with MailMessage do
begin
Subject:=EditSubject.Text;//邮件正题
Body.Assign(MemoMesg.Lines);//邮件正文
From.Address:=Trim(EditFrom.Text);//发信人地址
Recipients.EMailAddresses:=Trim(editTo.Text);//收件人地址
end;
//3:初始化TIdSMTP实例属性
with IdSMTP do
begin
Host:=Trim(HostName.Text);//SMTP服务器地址
Port:=StrToInt(Trim(HostPort.Text));//SMTP服务器端口
UserName:=Trim(EditUser.Text);//用户帐号
Password:=Trim(EditPass.Text);//用户密码
end;
//4:连接到SMTP服务器
//MemoInfo.Lines.Add( '准备连接到服务器! '+HostName.Text);
StatusBar1.Panels[0].Text:= '准备连接到服务器! '+HostName.Text;
try
IdSmtp.Connect(); //调用connect连接服务器
except //连接失败,产生异常
begin


//memoInfo.Lines.Add( '无法连接到服务器! '+HostName.Text);
StatusBar1.Panels[0].Text:= '无法连接到服务器! '+HostName.Text;
Exit;
end;
end;
if(IdSMTP.AuthSchemesSupported.IndexOf( 'LOGIN ') <> -1)then
begin //服务器需要验证
//MemoInfo.Lines.Add( '服务器需要验证 ');
//MemoInfo.Lines.Add( '开始验证 ');
StatusBar1.Panels[0].Text:= '服务器需要验证 ';
StatusBar1.Panels[0].Text:= '开始验证 ';
try
if IdSMTP.Authenticate then
//MemoInfo.Lines.Add( '服务器验证通过 ')
StatusBar1.Panels[0].Text:= '服务器验证通过 '
else
//MemoInfo.Lines.Add( '服务器验证失败 ');//验证失败
StatusBar1.Panels[0].Text:= '服务器验证失败 ';
except
begin
//MemoInfo.Lines.Add( '服务器验证失败 ');
StatusBar1.Panels[0].Text:= '服务器验证失败 ';
IdSMTP.Disconnect;//断开连接
Exit;
end;
end;
end
else
begin //服务器不需要验证
//MemoInfo.Lines.Add( '服务器不需要验证 ');
StatusBar1.Panels[0].Text:= '服务器不需要验证 ';
end;
try
idsmtp.Send(MailMessage);//调用send发送信件
Except
//MemoInfo.Lines.Add( '发送失败 ');
StatusBar1.Panels[0].Text:= '发送失败 ';
end;
idsmtp.Disconnect;

end;

procedure TFormmail.IdSMTPConnected(Sender: TObject);
begin
//MemoInfo.Lines.Add( '已经连接到服务器! '+HostName.Text);
StatusBar1.Panels[0].Text:= '已经连接到服务器! '+HostName.Text;
end;

procedure TFormmail.IdSMTPDisconnected(Sender: TObject);
begin
//MemoInfo.Lines.Add( '断开连接 ');
StatusBar1.Panels[0].Text:= '与smtp服务器断开连接 ';
StatusBar1.Panels[0].Text:= '等待新的连接 ';
end;

procedure TFormmail.IdSMTPWork(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
begin
//MemoInfo.Lines.Add( '正在发送信件 ');
StatusBar1.Panels[0].Text:= '正在发送信件 ';
end;

procedure TFormmail.IdSMTPWorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer);
begin
//MemoInfo.Lines.Add( '开始发送信件 ');
StatusBar1.Panels[0].Text:= '开始发送信件 ';
end;

procedure TFormmail.IdSMTPWorkEnd(Sender: TObject; AWorkMode: TWorkMode);
begin
//MemoInfo.Lines.Add( '发送信件完毕 ');
showmessage( '恭喜,信件发送成功!! ');
end;

procedure TFormmail.AttachAddClick(Sender: TObject);
begin
if AddAttachDlg.Execute then
begin
//添加附件到MailMessage
TidAttachment.Create(MailMessage.MessageParts,AddAttachDlg.FileName);
AttachmentList.Items.Add(AddAttachDlg.FileName);
end;
end;

procedure TFormmail.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
index:Integer;
begin
//有效性检查
if AttachmentList.ItemIndex=-1 then
exit;
//如果按Delete键,则删除该组件
if Key <> VK_DELETE then
exit;
index:=AttachmentList.ItemIndex;
MailMessage.MessageParts.Delete(index);
AttachmentList.Items.Delete(index);
end;

procedure TFormmail.FormCreate(Sender: TObject);
begin
StatusBar1.Panels[0].Text:= '等待新的连接 ';
StatusBar1.Panels[1].Text:= '当前时间: '+datetostr(date)+ ' '+timetostr(time);
end;

end.

热点排行