Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Fortschritt vom senden einer EMail (idsmtp) per Progressbar (https://www.delphipraxis.net/55891-fortschritt-vom-senden-einer-email-idsmtp-per-progressbar.html)

hitmiccs 28. Okt 2005 09:41


Fortschritt vom senden einer EMail (idsmtp) per Progressbar
 
Hallo Leute!

Ich versuche den Fortschritt beim Senden einer Email per IdSMTP (Indy) auf einem Progressbar darzustellen.
Das senden funktioniert perfekt, nur, weil die angehängten Dateien oft sehr groß sind, möchte ich den Benutzer mit der Progressbar über den Status beim Senden informieren.

Weiß jemand wie ich das anstellen kann, und auf welchen Teil von IdSMTP ich zugreifen muss?



mfg
hitmiccs

Luckie 28. Okt 2005 09:45

Re: Fortschritt vom senden einer EMail (idsmtp) per Progress
 
So weit ich weiß, kennt die Komponente OnWorkBegin, OnWork und OnWorkEnd oder so.

hitmiccs 28. Okt 2005 10:26

Re: Fortschritt vom senden einer EMail (idsmtp) per Progress
 
Ist richtig, das hatte ich in einem anderen Forum auch schon gehört/gelesen. Leider geben mir diese Eigenschaften immer den Wert "0" zurück... jemand noch eine Idee?

Luckie 28. Okt 2005 10:31

Re: Fortschritt vom senden einer EMail (idsmtp) per Progress
 
Wie andere Ideen? Die Auswertung dieser Ereignisse dieser Komponente ist die einzige Idee von mir und die vernünftigeste dies bezüglich. Und wenn es bei dir nicht funktioniert, dann hast du einen Fehler in deinem Code und den solltest du finden, anstatt gleich nach einer anderen Lösung zu fragen, nur weil die einzig vernünftige Lösung nicht gleich auf Anhieb funktioniert.

Jelly 28. Okt 2005 10:36

Re: Fortschritt vom senden einer EMail (idsmtp) per Progress
 
Zitat:

Zitat von Luckie
Wie andere Ideen? Die Auswertung dieser Ereignisse dieser Komponente ist die einzige Idee. Und wenn es bei dir nicht funktioniert, dann hast du einen Fehler in deinem Code

Nein, das ist bei den Indy Komponenten in der Tat so. Beim Beginn des Versendens weiss die IdSMTP Komponente komischerweise noch nicht, wie gross die Mail ist. Ist wohl ein Bug, den ich folgendermassen umgehe, im OnWorkBegin Event:

Delphi-Quellcode:
procedure TdmMailHKA.IdSMTP1WorkBegin(Sender: TObject;
  AWorkMode: TWorkMode; const AWorkCountMax: Integer);
var
 FN : string ;
begin
     FN := format ('c:\temp\%s.txt',['Mail']) ;
     IndyMessage.SaveToFile (FN) ;
     FS := TFileStream.Create(FN,fmOpenRead) ;
     ProgressBar.Max := FS.Size ;
     F.free ;
end;
Also schlicht die Message als File speichern und die Dateigrösse ermitteln.

hitmiccs 28. Okt 2005 10:47

Re: Fortschritt vom senden einer EMail (idsmtp) per Progress
 
Immer mit der Ruhe @Luckie, ich würde nicht fragen wenn ich nicht schon von anderen gehört hätte, das dieser "Fehler" existiert :hi: :thumb:

Ich teste jetzt den Code von Jelly...

dimo 28. Okt 2005 12:08

Re: Fortschritt vom senden einer EMail (idsmtp) per Progress
 
Ich würde natürlich keine Datei verwenden, sondern ein TMemoryStream und die EMail im Speicher abspeichern, Grösse ermitteln und Speicher freigeben. Sollte natürlich schneller laufen.

Dimo

Jelly 28. Okt 2005 15:18

Re: Fortschritt vom senden einer EMail (idsmtp) per Progress
 
Zitat:

Zitat von dimo
Ich würde natürlich keine Datei verwenden, sondern ein TMemoryStream und die EMail im Speicher abspeichern, Grösse ermitteln und Speicher freigeben. Sollte natürlich schneller laufen.

Das stimmt, aber Indymessage kennt glaub ich nur die Methode SaveToFile und nicht SaveToStream... Kanns aber im Moment nicht überprüfen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:53 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