Habe in einem meiner Programme einen Email-Part und beim Erstellen der eigentlichen
Mail, genauer beim Hinzufügen von Anhängen (jenseits 30 MB) gibt es merkliche
Einbußen in der Geschwindigkeit. Das Program steht wie eine Salzsäule und ackert.
Aktuell habe ich einen Anhang von 39MB Größe und er braucht mehr als 15 min.
Ein Thread kommt auch nicht in Frage, da zum Zeitpunkt des "Eintütens" der Benutzer
eh nichts machen soll. Es ist halt nur diese lange Zeit die er dafür braucht.
Das System:
Dual Pentium Xeon 3.06 GHz
4 GB
RAM
200 GB Harddisk.
Also am System sollte es nicht liegen. Hat jemand schonmal diese
Erfahrung mit der
Indy SMTP Komponente gemacht?
Gruß und danke im Voraus für irgendeinen Hinweis.
Nighthawk1310
Hier noch meine Routine zum Vorbereiten der Email.
Delphi-Quellcode:
function TfrmSearch.BuildMail: Integer;
var iCount: Integer;
sReceipientsAddresses : WideString;
iCutPos, ReceipientCount : Integer;
MS : TMemoryStream;
begin
msgSend.Clear;
try
//Setup MailBody
with TIdText.Create(msgSend.MessageParts, memoText.Lines) do
begin
ContentType := 'text/plain';
end;
msgSend.Body.Assign(memoText.Lines);
//Setup MailAttachments
if lstMA.Count > 0 then
begin
msgSend.ContentType := 'multipart/mixed';
for iCount := 0 to lstMA.Count -1 do
TIdAttachmentFile.Create(msgSend.MessageParts, lstMA.Items[iCount]);
end;
//Setup Sender
msgSend.From.Text := frmPanel.xUser.sMailAdr;
msgSend.ReplyTo.EMailAddresses := frmPanel.xUser.sMailAdr;
//Setup Receipients
//vst ist ein VirtualTreeView
sReceipientsAddresses := PrepareReceipients(txtTo.Text, vst, ReceipientCount);
if ReceipientCount = 1 then
msgSend.Recipients.EMailAddresses := sReceipientsAddresses
else
begin
iCutPos := Pos(';', sReceipientsAddresses);
msgSend.Recipients.EMailAddresses := Copy(sReceipientsAddresses, 1, iCutPos - 1);
msgSend.BccList.EMailAddresses := Copy(sReceipientsAddresses, iCutPos + 1, Length(sReceipientsAddresses));
end;
msgSend.CCList.EMailAddresses := '';
//Setup Subject
msgSend.Subject := txtSubject.Text;
//Setup Priority
msgSend.Priority := TIdMessagePriority(2);
//Calculate Size
MS := TMemoryStream.Create;
msgSend.SaveToStream(MS); //Könnte er hier solange brauchen?
msgSend.Tag := MS.Size;
Result := msgSend.Tag;
finally
MS.free;
if msgSend.Tag = 0 then
Result := -1;
end;
end;
und auch noch die function zum Senden der fertigen Email
Delphi-Quellcode:
function TfrmSearch.SendMail(Email : TIDMessage) : Boolean;
begin
result := False;
//Username and Password
SMTP.Username := frmPanel.xUser.sMailUser;
SMTP.Password := frmPanel.xUser.sMailPass;
//Host and Port
SMTP.Host := frmPanel.xUser.sSmtp;
SMTP.Port := 25;
//Sending
bSending := True;
//Hier sage ich das ich beim Senden bin. wird im Disconnect
//der SMTP Kompo abgefragt
SMTP.Connect;
try
SMTP.Send(Email);
bSending := False;
SMTP.Disconnect;
result := True;
except
result := False;
bSending := False;
SMTP.Disconnect;
end;
end;