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;
Vielleicht kann mir jemand von Euch aus dem Wald helfen?
Komme nicht aus dem Wald, aber mir fällt ein: du hast ja immer nur zwei Anhänge, einen mit Index 0 und einen mit Index 1. Dann belege doch, wenn dir das Free und das Create zu langsam sind, diese beiden Items immer wieder einfach neu in der Schleife. Vorher musst du natürlich die beiden Items 0 und 1 erzeugen mit Add:
Delphi-Quellcode:
Anhang.MessageParts.Items[0].FileName := 'C:\Stuff\MyPdf.pdf';
Anhang.MessageParts.Items[1].FileName := 'C:\Stuff\MyExcelsheet.xls';
Wir haben eine Anwendung für unser Office, um Updates bei Kunden anzmelden. Dort wird manchmal bei kleinen Umfang eine zip-Datei mitverschickt. Bis jetzt haben wir dieses Problem nicht gefunden. Wir machen das aber auch ein bisschen anders innerhalb der Schleife:
Delphi-Quellcode:
Function TFormSend.SendMail: Boolean;
Var
MList : TStrings;
begin
MList := TStringList.Create;
Try
MList.Text := DM.Qset_Mailtext.FieldByName('
Containment').AsString;
Try
IndyMess.Recipients.EMailAddresses := E_Customer;
IndyMess.From.Text := E_User;
IndyMess.Sender.Text := E_Sender;
IndyMess.Subject := E_Topic;
IndyMess.Body := MList;
IndyMess.MessageParts.Clear;
If FileExists(E_Filename)
Then
Begin
If E_Filename <> '
'
Then
Begin
IndyMess.MessageParts.Add();
TIdAttachmentFile.Create(IndyMess.MessageParts,E_Filename);
End;
End;
IndySMTP.Connect;
IndySMTP.Send(IndyMess);
IndySMTP.Disconnect;
Result := True;
Except
On e:
exception Do
Begin
GLD.ErrorMessage := '
Error while sending mail (' + E_Topic + '
): ' + e.
Message;
Result := False;
End;
End;
Finally
MList.Free;
End;
end;
Ob dir das jetzt weiterhilft, weiss ich nicht. Eine dritte Möglichkeit wäre, die beiden Attachementfiles jedes mal vorher zu löschen mit Delete:
Delphi-Quellcode:
Anhang.MessageParts.Delete(0);
Anhang.MessageParts.Delete(1);
Danach sollten da auch keine Items mehr existieren und du kannst dann im ncähsten Schleifendurchlauf mit Add wieder neue machen.