软件在邮件发送的过程中退出,就会产生异常,请问高手,如何在程序退出的时候强行终止邮件发送,避免异常var
FormReport: TFormReport;
implementationuses Unit1, Unit9;{$R *.dfm}var
TmpThread:TSendMail;procedure TFormReport.TeButton3Click(Sender: TObject);
var
Pt:TIdMessageParts;
AttFile:AnsiString;
begin
RainExam.OpenDialog.Title:='请选择插入的附件';
RainExam.OpenDialog.Filter:='所有文件(*.*)|*.*';
if RainExam.OpenDialog.Execute then
begin
// Self.spSkinMemo1.Lines.Add(RainExam.OpenDialog.FileName);
// Pt:=Self.IdMsg.MessageParts.Add;
//Pt:=TidMessageParts.Create(Self.IdMsg.MessageParts);
Self.spSkinMemo2.Lines.Add('附件:'+RainExam.OpenDialog.FileName);
AttFile:=RainExam.OpenDialog.FileName;
TIdAttachment.Create(Self.IdMsg.MessageParts,Attfile);
end;
end;procedure TFormReport.Send;
begin
SMTP1.AuthenticationType := atLogin; SMTP1.username:='903315113';
SMTP1.Password :='zhouweiyong'; SMTP1.Host :='smtp.qq.com';
SMTP1.Port :=25;
try
if self.SMTP1.Connected then Self.SMTP1.Disconnect;
SMTP1.Connect;
except
RainExam.MessageBox.MessageDlg('邮件发送失败,请稍后再次发送',mtCustom,[MBOK],0);
Exit;
end; try
with IdMsg do
begin
body.Clear;
Body.Assign(Self.spSkinMemo1.Lines);
From.address :='[email protected]';
Recipients.EMailAddresses :='[email protected]';
Subject:=Self.spSkinComboBox1.Text+' '+Self.TeSEdit1.Text; //idmsg.MessageParts.Add
end;
SMTP1.Send(IdMsg);
except
RainExam.MessageBox.MessageDlg('邮件发送失败,请稍后再次发送',mtCustom,[MBOK],0);
exit;
end; Self.Hide;
RainExam.MessageBox.MessageDlg('邮件发送成功,谢谢您对雨璇的支持!',mtCustom,[MBOK],0);
SMTP1.Disconnect;
Self.Close;
Self.TeButton1.Enabled:=true;
end;procedure TFormReport.TeButton1Click(Sender: TObject);
begin
Self.spSkinStatusPanel1.Caption:='正在发送邮件,请稍后!';
Self.TeButton1.Enabled:=false;
//if TmpThread<>nil then FreeAndNil(TmpThread);
if TmpThread<>nil then TmpThread.Terminate; TmpThread:=TSendMail.Create(True);
TmpThread.FreeOnTerminate:=True;
TmpThread.Resume;
end;procedure TFormReport.SMTP1Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
begin
Self.spSkinStatusPanel1.Caption:='正在开始发送邮件...';
Self.Gauge1.Progress:=AWorkCount;
end;procedure TFormReport.SMTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer);
begin
Self.Gauge1.MaxValue:=Self.SMTP1.MaxLineLength;
Self.spSkinStatusPanel1.Caption:='正在准备连接邮件服务器...';
end;procedure TFormReport.SMTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
begin
Self.spSkinStatusPanel1.Caption:='发送完毕,正在退出连接...';
Self.Gauge1.Progress:=Self.Gauge1.MaxValue;
end;procedure TFormReport.TeButton2Click(Sender: TObject);
begin
ShellExecute(Application.Handle,'open',PChar(RainExam.bbspage), nil, nil, SW_MAXIMIZE);
end;procedure TFormReport.FormDestroy(Sender: TObject);
begin
if Self.SMTP1.Connected then Self.SMTP1.Disconnect;
if TmpThread<>nil then
begin
TmpThread.Terminate;
// showmessage('');
// FreeAndNil(Tmpthread);
end;
end;procedure TFormReport.TeButton4Click(Sender: TObject);
begin
Self.Close;
end;
FormReport: TFormReport;
implementationuses Unit1, Unit9;{$R *.dfm}var
TmpThread:TSendMail;procedure TFormReport.TeButton3Click(Sender: TObject);
var
Pt:TIdMessageParts;
AttFile:AnsiString;
begin
RainExam.OpenDialog.Title:='请选择插入的附件';
RainExam.OpenDialog.Filter:='所有文件(*.*)|*.*';
if RainExam.OpenDialog.Execute then
begin
// Self.spSkinMemo1.Lines.Add(RainExam.OpenDialog.FileName);
// Pt:=Self.IdMsg.MessageParts.Add;
//Pt:=TidMessageParts.Create(Self.IdMsg.MessageParts);
Self.spSkinMemo2.Lines.Add('附件:'+RainExam.OpenDialog.FileName);
AttFile:=RainExam.OpenDialog.FileName;
TIdAttachment.Create(Self.IdMsg.MessageParts,Attfile);
end;
end;procedure TFormReport.Send;
begin
SMTP1.AuthenticationType := atLogin; SMTP1.username:='903315113';
SMTP1.Password :='zhouweiyong'; SMTP1.Host :='smtp.qq.com';
SMTP1.Port :=25;
try
if self.SMTP1.Connected then Self.SMTP1.Disconnect;
SMTP1.Connect;
except
RainExam.MessageBox.MessageDlg('邮件发送失败,请稍后再次发送',mtCustom,[MBOK],0);
Exit;
end; try
with IdMsg do
begin
body.Clear;
Body.Assign(Self.spSkinMemo1.Lines);
From.address :='[email protected]';
Recipients.EMailAddresses :='[email protected]';
Subject:=Self.spSkinComboBox1.Text+' '+Self.TeSEdit1.Text; //idmsg.MessageParts.Add
end;
SMTP1.Send(IdMsg);
except
RainExam.MessageBox.MessageDlg('邮件发送失败,请稍后再次发送',mtCustom,[MBOK],0);
exit;
end; Self.Hide;
RainExam.MessageBox.MessageDlg('邮件发送成功,谢谢您对雨璇的支持!',mtCustom,[MBOK],0);
SMTP1.Disconnect;
Self.Close;
Self.TeButton1.Enabled:=true;
end;procedure TFormReport.TeButton1Click(Sender: TObject);
begin
Self.spSkinStatusPanel1.Caption:='正在发送邮件,请稍后!';
Self.TeButton1.Enabled:=false;
//if TmpThread<>nil then FreeAndNil(TmpThread);
if TmpThread<>nil then TmpThread.Terminate; TmpThread:=TSendMail.Create(True);
TmpThread.FreeOnTerminate:=True;
TmpThread.Resume;
end;procedure TFormReport.SMTP1Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
begin
Self.spSkinStatusPanel1.Caption:='正在开始发送邮件...';
Self.Gauge1.Progress:=AWorkCount;
end;procedure TFormReport.SMTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer);
begin
Self.Gauge1.MaxValue:=Self.SMTP1.MaxLineLength;
Self.spSkinStatusPanel1.Caption:='正在准备连接邮件服务器...';
end;procedure TFormReport.SMTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
begin
Self.spSkinStatusPanel1.Caption:='发送完毕,正在退出连接...';
Self.Gauge1.Progress:=Self.Gauge1.MaxValue;
end;procedure TFormReport.TeButton2Click(Sender: TObject);
begin
ShellExecute(Application.Handle,'open',PChar(RainExam.bbspage), nil, nil, SW_MAXIMIZE);
end;procedure TFormReport.FormDestroy(Sender: TObject);
begin
if Self.SMTP1.Connected then Self.SMTP1.Disconnect;
if TmpThread<>nil then
begin
TmpThread.Terminate;
// showmessage('');
// FreeAndNil(Tmpthread);
end;
end;procedure TFormReport.TeButton4Click(Sender: TObject);
begin
Self.Close;
end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货