由于发送邮件包括了附件,内容比较大必须给用户显示个进度条。看着TIdSMTP有个OnWorkBegin和OnWork事件,而且OnWorkBegin有个AWorkCountMax参数,喜出望外,这样就知道发送的总大小了,弄个进度条这不是分分钟就OK了嘛。。结果一试发现然并卵。于是只能自己想办法了。
测试了发下发现和附件的总大小是一样的。这样就只要解决附件总大小就可以了,方法也简单,在添加附件的时候计算一下文件长度然后保存在一个变量中即可。在OnWorkBegin的时候设置为进度条最大值就好了。
procedure TfrmMailSend.IdSMTP1Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
begin
self.ProgressBar1.Position := AWorkCount;
Console('正在发送日志......');
Application.ProcessMessages;
end;
procedure TfrmMailSend.IdSMTP1WorkBegin(Sender: TObject;
AWorkMode: TWorkMode; const AWorkCountMax: Integer);
begin
ProgressBar1.Position := 0;
if FAttaSize >= 0 then
ProgressBar1.Max := FAttaSize
else
ProgressBar1.Max := 0;
Console('开始发送日志......');
end;
procedure TfrmMailSend.IdSMTP1WorkEnd(Sender: TObject;
AWorkMode: TWorkMode);
begin
Application.ProcessMessages;
FAttaSize := 0;
Console('发送完成');
end;