Einzelnen Beitrag anzeigen

Benutzerbild von Nighthawk1310
Nighthawk1310

Registriert seit: 22. Feb 2004
Ort: Izmir / Türkei
45 Beiträge
 
Delphi 7 Enterprise
 
#1

Indy SMTP/Indy Message hat Probleme mit großen Emails ?!

  Alt 1. Sep 2006, 11:31
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;
Miniaturansicht angehängter Grafiken
fehler_743.jpg  
Michael
  Mit Zitat antworten Zitat