Einzelnen Beitrag anzeigen

Slipstream
(Gast)

n/a Beiträge
 
#6

AW: Attachment löschen

  Alt 15. Feb 2017, 18:24
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.

Geändert von Slipstream (16. Feb 2017 um 04:45 Uhr) Grund: Fehler in Code korrigiert
  Mit Zitat antworten Zitat