从 Delphi 10.4升级到11.3后,我在电子邮件中遇到了一个奇怪的附件问题。从文件直接从服务器发送电子邮件,其中exe-文件正在运行速度快发送两个300 KB的附件需要大约10分钟的文件位于网络共享。我的第一个想法是缓慢的网络。它被测量为每秒20 MB。没有那么快,但300 KB应该需要秒而不是分钟发送。
我的应用程序在这段时间没有响应,因为它发生在主线程中。所以这是一个巨大的问题。任务管理器只显示低CPU使用率,所以很明显它在等待什么。
这里是发送电子邮件的方法。请检查并评论任何可疑代码。请注意,Indy BoldHelper是一个内部方法,它使用一个接口(vHelp)来释放参数的内存。这个想法是,我不需要传统的try/finally来完成这个任务。TIdMessageBuilderHtml呢?Html不仅仅是纯文本。有没有更好的方法来发送带有附件的计划文本?
class function TATMail.SendMail(const aReceiver, aSender, aReplyTo, aCc,
aSubject, aBody, aAttachments: string; out aOutMessage: string): Boolean;
var
smtp: TIdSMTP;
msg: TidMessage;
builder: TIdMessageBuilderHtml;
i: Integer;
vStrList: TStringList;
vUserName, vPassword: String;
vHelp: IBoldHelper;
begin
Result := False;
vHelp := CreateBoldHelper(vStrList, smtp, msg, builder);
vStrList := TStringList.Create;
msg := TIdMessage.Create(nil);
builder := TIdMessageBuilderHtml.Create;
builder.PlainText.Text := aBody;
builder.PlainTextCharSet := cnUTF8;
if aAttachments <> '' then
begin
vStrList.CommaText := aAttachments;
for i := 0 to vStrList.Count - 1 do
if FileExists(vStrList[i]) then
builder.Attachments.Add(vStrList[i]);
end;
builder.FillMessage(msg);
msg.From.Name := aSender;
msg.From.Address := aReplyTo;
msg.Subject := aSubject;
msg.Recipients.EMailAddresses := aReceiver;
if Pos('@', aCc) > 0 then
msg.CCList.EMailAddresses := aCc;
smtp := TIdSMTP.Create(nil);
try
smtp.Host := GetSystemConfig.SMTPHost;
// smtp.UseTLS := utNoTLSSupport;
smtp.Port := GetSystemConfig.Port;
vUserName := GetSystemConfig.UserName;
vPassword := GetSystemConfig.PassWord;
if (vUserName <> '') and (vPassword <> '') then
begin
smtp.Username := vUserName;
smtp.Password := vPassword;
smtp.AuthType := satDefault;
end
else
smtp.AuthType := satNone;
smtp.Connect;
try
smtp.Send(msg);
aOutMessage := 'Mail sent to ' + aReceiver +'.';
Result := true;
finally
smtp.Disconnect;
end;
except
on E: Exception do // Do not raise exception again. Only show errormessage for user
aOutMessage := Format('%s. Mail couldn''t be sent to %s.', [E.Message, aReceiver]);
end;
end;
字符串
1条答案
按热度按时间yqlxgs2m1#
只是想说,复制附件到一个快速的文件夹,如本地一个之前,发送电子邮件要快得多