AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Indy SMTP/Indy Message hat Probleme mit großen Emails ?!
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von Nighthawk1310 · begonnen am 1. Sep 2006 · letzter Beitrag vom 2. Sep 2006
Antwort Antwort
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
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Indy SMTP hat Probleme mit großen Emails ?!

  Alt 1. Sep 2006, 11:40
Wie lange brauchst du denn sonst für den Upload (!) von 39MB? Irgendwie müssen die ja aus deinem PC raus auf die gegenseite...
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von Nighthawk1310
Nighthawk1310

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

Re: Indy SMTP hat Probleme mit großen Emails ?!

  Alt 1. Sep 2006, 12:19
Es geht nicht ums Senden, sondern ums Eintüten
[Edit] Jedenfalls geht es nicht direkt ums Senden.

Bei Indy benötige ich ja die TIdMessage und die TIdSMTP.
Und beim Erstellen der Nachricht und dem Hinzufügen der Attachments gibts
das Problem. Und bis dann die SMTP Kompo anfangen kann zu arbeiten dauerts halt.

Mein "Empfangs"-Programm für Emails hat da nicht solche Probleme.
Es arbeitet übrigens auch mit den Indys (dort aber mit POP3).
Gut er braucht dort auch, selbst im Netzwerk, 2-3 min um die Mail zu empfangen,
aber das ist ja nichts im Vergleich dazu die Mail einzutüten und zu senden.

Meine Routinen zum Erstellen und zum Senden der Mail habe ich mit an den ersten Beitrag gehängt.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Nighthawk1310
Nighthawk1310

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

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

  Alt 2. Sep 2006, 08:39
Habe mein Problem gelöst.


Delphi-Quellcode:
       //Calculate Size

       MS := TMemoryStream.Create;
       msgSend.SaveToStream(MS);
Es war das SaveToStream. Das ist grottenlangsam.
Habe jetzt SaveToFile benutzt und das ist im Gegensatz zu
SaveToStream sehr viel schneller. Habe für das Eintüten eines
130 MB Anhangs, mit Speicherung zur Größenermittlung und kopieren des
Anhangs in ein Backupverzeichnis, keine 3 Minuten auf meinem
Testrechner (PIII 1,3GHz; 384 MB RAM) gebraucht.

Das Thema hat sich also hiermit erledigt.
Trotzdem danke...
Michael
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz