设为首页 加入收藏

TOP

技术笔记:Indy控件发送邮件(三)
2017-10-10 12:07:21 】 浏览:8318
Tags:技术 笔记 Indy 控件 发送 邮件
ransfer-Encoding:
' + ATextPart.ContentTransfer); {do not localize} WriteStrings(ATextPart.ExtraHeaders); WriteLn(''); // TODO: Provide B64 encoding later // if AnsiSameText(ATextPart.ContentTransfer, 'base64') then begin // LEncoder := TIdEncoder3to4.Create(nil); if AnsiSameText(ATextPart.ContentTransfer, 'quoted-printable') then begin for i := 0 to ATextPart.Body.Count - 1 do begin if Copy(ATextPart.Body[i], 1, 1) = '.' then begin ATextPart.Body[i] := '.' + ATextPart.Body[i]; end; Data := TIdEncoderQuotedPrintable.EncodeString(ATextPart.Body[i] + EOL); if TransferEncoding = iso2022jp then Write(Encode2022JP(Data)) else Write(Data); end; end else begin WriteStrings(ATextPart.Body); end; WriteLn(''); end;

看到注释我已经跪了。。T_T,原来base64还是TODO的功能,不知道后续的Indy版本有没有实现。。

 

发送邮件进度

由于发送邮件包括了附件,内容比较大必须给用户显示个进度条。看着TIdSMTP有个OnWorkBegin和OnWork事件,而且OnWorkBegin有个AWorkCountMax参数,喜出望外,这样就知道发送的总大小了,弄个进度条这不是分分钟就OK了嘛。。结果一试发现然并卵。于是只能自己想办法了。

发现OnWork有AWorkCount参数,发现这个参数是有用的,它会在被调用时返回当前已经发送的大小。那么就想这个大小会是什么大小呢?

测试了发下发现和附件的总大小是一样的。这样就只要解决附件总大小就可以了,方法也简单,在添加附件的时候计算一下文件长度然后保存在一个变量中即可。在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;

效果还是挺好。

 

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Firemonkey TComboBox 下拉菜单字.. 下一篇Firemonkey 在 iOS 平台能显示更..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目