![]() |
Mail versenden in Thread auslagern
Hallo,
und zwar dauerte das Versenden von Mails mit großen Anhängen immer äußerst lang, woraufhin ich versucht habe es in einen einen extra Thread auszulagern. Mit Threads kenn ich mich allerdings nich aus und irgendwas schein ich auch falsch gemacht zu haben, da ich eine Exception "Ungültiges Handle" beim Schließen des Programms bekomme. Ich glaube das hat irgendwas mit Thread Synchronisation zu tun oder so... Aber da steig ich nicht sorecht durch.
Delphi-Quellcode:
procedure SendenThreadExecute;
var tp: PThreadParams; Thread: THandle; ExitCode: Cardinal; ec: DWORD; ThreadID: Cardinal; begin if Length(MailForm.SubjectEdit.Text) >= 3 then begin New(tp); with Mailform.IdMsgSend do begin Body.Assign(Mailform.ContentMemo.Lines); From.Text := UserEmail; ReplyTo.EMailAddresses := UserEmail; Recipients.EMailAddresses := ReceiverEmail; { To: header } Subject := Mailform.SubjectEdit.Text; { Subject: header } Priority := TIdMessagePriority(Mailform.PrioComboBox.ItemIndex); { Message Priority } end; // with Mailform.SMTP.Username := SmtpServerUser; Mailform.SMTP.Password := SmtpServerPassword; {Allgemeine Einstellungen} Mailform.SMTP.Host := SmtpServerName; Mailform.SMTP.Port := SmtpServerPort; tp.sttemp := Mailform.EingangStatusBar.Panels[1].Text; Mailform.Label1.Caption := tp^.sttemp; tp.msgSend := Mailform.IdMsgSend; Thread := BeginThread(nil, 0, @SendenThreadFunction, tp, 0, ThreadID); // Auf Beendigung des Threads warten. //WaitForSingleObject(Thread, INFINITE); CloseHandle(Thread); end //if else begin MessageDlg('Bitte geben Sie einen Betreff ein.', mtWarning ,[mbOK],0); end; end; function SendenThreadFunction(tp: PThreadParams): Integer; var msgSend: TIdMessage; sttemp: String; begin sttemp := PThreadParams(tp)^.sttemp; msgSend := PThreadParams(tp)^.msgSend; {Mail verschicken} Mailform.ShowStatus('Verbindung mit Postausgangsserver wird hergestellt...'); Mailform.SMTP.Connect; try Mailform.SMTP.Send(msgSend); Mailform.ShowStatus('Nachricht wird gesendet'); finally Mailform.SMTP.Disconnect; Mailform.ShowStatus(sttemp); Mailform.MailPb.Visible := False; Mailform.MailPb.Position := Mailform.MailPb.Max; Mailform.EingangStatusBar.Panels[0].Text := 'Senden erfolgreich'; Dispose(tp); end; // try Könntet ihr mir vielleicht nen Hinweis geben was ich falsch mache und nen Anstoß wie ich es richtig machen kann? Danke |
Re: Mail versenden in Thread auslagern
So ziemlich jede 2te Zeile verursacht Probleme.
Lies bitte nochmal den Kommendar in der Quelldatei durch wenn dir Delphi eine neue Unit für ein von TThread-Abgeleitete Klasse erzeugt. Die VCL ist hier nicht Thread-Save, da die Win32-API hier eine Thread-Gebundene Verwendung von erzeugten GUI-Controls verlangt. |
Re: Mail versenden in Thread auslagern
Vielen Dank schonmal für die Antwort.
Zitat:
Viele Grüße, Franz |
Re: Mail versenden in Thread auslagern
Zitat:
|
Re: Mail versenden in Thread auslagern
oder Syncron per window-message
|
Re: Mail versenden in Thread auslagern
Zitat:
könntest Du evtl. ein kurzes Beispiel posten? Irgendwie verstehe ich nicht wie man das realisiert, trotz Online Hilfe.... Schon mal vielen Dank im Voraus |
Re: Mail versenden in Thread auslagern
Threading Tutorial:
![]() |
Re: Mail versenden in Thread auslagern
Ich danke dir vielmals für deine Hilfe Bernhard. Ich werde das Tutorial jetzt mal komplett durcharbeiten. Mit der Hilfe des Tutorials bin ich ja erstmal so weit gekommen wie ich schon bin :P
Falls ich noch Probleme habe werd ich mich nochmal zu Wort melden. :) Viele Grüße |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz