Einzelnen Beitrag anzeigen

rokli

Registriert seit: 21. Mär 2009
Ort: Rödinghausen
301 Beiträge
 
Delphi 10.4 Sydney
 
#1

Attachment löschen

  Alt 15. Feb 2017, 16:13
Moin!

Ich generiere mit den Indy (10.6.2...) Komponenten TMailMessage eine Mail, um diese dann mit TidSMTP zu versenden. Das ganze in einer Schleife, die die Empfänger- (und Sender-) Daten aus einer Datenbank bezieht. Das funktioniert intern (unsere Domain) als auch extern (nach dem wir am Exchange Bescheid gegeben habe, dass ich [also meine IP] rausmailen darf).

Diesen Mails sollen nun Anhänge angefügt werden. Und zwar jeweils ein PDF-Dokument und eine Excel Tabelle. Im Testprogramm sieht das so aus:

Delphi-Quellcode:
         // Anhänge: Uses Klausel: IdAttachment, IdMessageParts, IdAttachmentFile;
         // Anhang definiert:    VAR Anhang : TIdAttachment;
         if edtAttach.Text <> 'then
            Anhang   := TidAttachmentFile.Create(MailMessage.MessageParts, edtAttach.Text);
         if edtAttach2.Text <> 'then
            Anhang   := TidAttachmentFile.Create(MailMessage.MessageParts, edtAttach2.Text);

         MailSmtp.Connect;
         MailSmtp.Send(MailMessage);

         MailSmtp.Disconnect(true);
Auch das funktioniert! Zumindest bei ersten mal! Denn die so angefügten Attachments werden ich nicht wieder los! Wenn ich eine zweite Mail mit neuen Anhängen losschicke, bleibt ein Anhang vom vorherigen Vorgang erhalten und wird der zweiten Mail auch hinzugefügt. Dementsprechend habe ich dann 3 Anhänge (1 alten und 2 neue). Bei der dritten Mail habe ich schon 4 Anhänge: einen ganz alten, einen alten und die beiden (gewünschten) neuen Anhänge.

Aus einem alten Post (28.03.2006):

Auf die einzelnen Attachments kannst du mit

(*Name der Instanz von TIdMessage*).MessageParts.Items zugreifen.

Um die Datei aus der Attachmentliste zu löschen, reicht es, das Objekt freizugeben.

Delphi-Quellcode:
  for i := 0 to (*Name der Instanz von TIdMessage*).MessageParts.Count-1 do
    if ((*Name der Instanz von TIdMessage*).MessageParts.Items[i].StoredPathName = 'Pfad\zur\Datei') then
      (*Name der Instanz von TIdMessage*).MessageParts.Items[i].Free;
habe ich die Mimik entnommen, die Attachments zu löschen. Das funktioniert aber nicht (mehr?)!

Delphi-Quellcode:
         for I := Anhang.MessageParts.Count downto 1 do begin
            p_ProtoWrite('Attach Name ' + IntToStr(i) + ': ' + Anhang.MessageParts.Items[i].FileName); // nur Info in einer Protokolldatei
            Anhang.MessageParts.Items[i].Free;
            p_ProtoWrite('geFreeT: ' + InttoStr(i)); // nur Info in einer Protokolldatei
         end;
Und ein einfaches

Delphi-Quellcode:
Anhang.Free
oder
Anhang.Destroy
geht auch nicht.

Vielleicht kann mir jemand von Euch aus dem Wald helfen?

Gruß
Rolf
wenn nicht anders angegeben, schreibe ich zu D7, XE2 und MS SQL - ansonsten fragen Sie ihren Administrator oder einen Operator. Update 06/2020: Delphi 10.4 Sydney
  Mit Zitat antworten Zitat