AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi SMTP Mail, TidMessage im Thread
Thema durchsuchen
Ansicht
Themen-Optionen

SMTP Mail, TidMessage im Thread

Ein Thema von haentschman · begonnen am 8. Nov 2015 · letzter Beitrag vom 8. Nov 2015
 
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.431 Beiträge
 
Delphi 12 Athens
 
#1

SMTP Mail, TidMessage im Thread

  Alt 8. Nov 2015, 16:17
Hallo alle...

folgender Code: (Auszug)
Delphi-Quellcode:
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;
... funktioniert normal im Main Thread. Die Mail kommt mit allen "Eintragungen" korrekt an.

Instanziere ich die Klasse TdMail in einem Thread knallt es im destructor von TidMessage beim Freigeben... Die Mail kommt trotzdem korrekt an.
Delphi-Quellcode:
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;
...instanziert wird die FromList genau wie die vorhergehenden.
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? Danke...

PS: Wenn man zur Gegenprobe die Freigabe auskommentiert gibt es einen A... voll Memory Leaks.
Angehängte Grafiken
Dateityp: png Message.png (96,3 KB, 18x aufgerufen)
Dateityp: png Message_1.png (25,2 KB, 10x aufgerufen)

Geändert von haentschman ( 8. Nov 2015 um 16:40 Uhr)
  Mit Zitat antworten Zitat
 


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:21 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