![]() |
SMTP Mail, TidMessage im Thread
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo alle...8-)
folgender Code: (Auszug)
Delphi-Quellcode:
... funktioniert normal im Main Thread. Die Mail kommt mit allen "Eintragungen" korrekt an.
function TdMail.SendMail(Recipients, Body: TStrings; Subject: string): Boolean;
var CurrentMessage: TIdMessage; function FillMessageRecipients(RecipientsList: TStrings): Boolean; var I: Integer; Item: TIdEMailAddressItem; begin Result:= (RecipientsList.Count > 0); for I := 0 to RecipientsList.Count - 1 do begin Item:= CurrentMessage.Recipients.Add; Item.Address:= RecipientsList[I]; end; end; begin Result:= False; CurrentMessage:= TIdMessage.Create(nil); try if FillMessageRecipients(Recipients) then begin CurrentMessage.From.Address:= FFromAddress; CurrentMessage.Subject:= Subject; CurrentMessage.Body.AddStrings(Body); Smtp.Password:= TdTools.DecryptPassword(FPasswordEncrypted); try Smtp.Connect; Smtp.Send(CurrentMessage); Smtp.Disconnect; if Assigned(FOnMailSend) then begin FOnMailSend(Self, CurrentMessage.Recipients[0].Address, CurrentMessage.Subject); end; Result:= True; except on E: Exception do begin if Assigned(FOnMailError) then begin FOnMailError(Self, CurrentMessage.Recipients[0].Address, CurrentMessage.Subject, conTextMailSendError + E.Message); end; end; end; end; finally CurrentMessage.Free; // <- bei dieser Freigabe end; end; Instanziere ich die Klasse TdMail in einem Thread knallt es im destructor von TidMessage beim Freigeben... :shock: Die Mail kommt trotzdem korrekt an.
Delphi-Quellcode:
...instanziert wird die FromList genau wie die vorhergehenden. :gruebel:
destructor TIdMessage.Destroy;
begin FreeAndNil(FBody); FreeAndNil(FRecipients); FreeAndNil(FBccList); FreeAndNil(FCcList); FreeAndNil(FMessageParts); FreeAndNil(FNewsGroups); FreeAndNil(FHeaders); FreeAndNil(FExtraHeaders); FreeAndNil(FFromList); // <- hier FreeAndNil(FReplyTo); FreeAndNil(FSender); FreeAndNil(FReceiptRecipient); FreeAndNil(FMIMEBoundary); FreeAndNil(FLastGeneratedHeaders); inherited Destroy; end;
Delphi-Quellcode:
procedure TIdMessage.InitComponent;
begin inherited; FBody := TStringList.Create; TStringList(FBody).Duplicates := dupAccept; FRecipients := TIdEmailAddressList.Create(Self); FBccList := TIdEmailAddressList.Create(Self); FCcList := TIdEmailAddressList.Create(Self); FMessageParts := TIdMessageParts.Create(Self); FNewsGroups := TStringList.Create; FHeaders := TIdHeaderList.Create(QuoteRFC822); FFromList := TIdEmailAddressList.Create(Self); // <- hier FReplyTo := TIdEmailAddressList.Create(Self); FSender := TIdEmailAddressItem.Create; FExtraHeaders := TIdHeaderList.Create(QuoteRFC822); FReceiptRecipient := TIdEmailAddressItem.Create; NoDecode := ID_MSG_NODECODE; FMIMEBoundary := TIdMIMEBoundary.Create; FLastGeneratedHeaders := TIdHeaderList.Create(QuoteRFC822); Clear; FEncoding := meDefault; end; Irgendwelche Ideen dazu? :P Danke... PS: Wenn man zur Gegenprobe die Freigabe auskommentiert gibt es einen A... voll Memory Leaks. 8-) |
AW: SMTP Mail, TidMessage im Thread
Sind die Events verdrahtet? Bedenkst du, daß die im Thread-Kontext aufgerufen werden? Machen die was mit dem Self-Parameter?
|
AW: SMTP Mail, TidMessage im Thread
meine Standard-IDEE dazu:
!man zerstört besser IMMER in umgedrehter Reihenfolg zur Erstellung! Stelle das mal so um und eventuell hat sich dein Problem damit auch schon gelöst:) |
AW: SMTP Mail, TidMessage im Thread
Danke Jungs...:P Ihr dürft hauen... :wall:
Zitat:
Delphi-Quellcode:
procedure TWorkerPollingServer.DoOnMail(Sender: TObject; Recipient, Subject: string);
begin FMsgLog:= CreateLogMessage(msNormal); try FMsgLog.DeviceID:= 0; //Server FMsgLog.MessageState:= msNormal; FMsgLog.LogTime:= Now; FMsgLog.LogText:= conTextMailInformation + 'versendet (' + conTextServer + ')'; Synchronize(SyncOnLog); finally FMsgLog.Free; end; end; Zitat:
Schuldig im Sinne der Anklage! Den Mailer (TdMail) im constructor des Threads erstellt und nicht im Kontext vom Execute. :wall: Das kann nicht funktionieren. Ich reiche Urlaub ein. Wer lädt mich ein?.... 8-) Komisch das man erst immer darüber schreiben muß bis einem so etwas auffällt. :stupid: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:20 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