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