Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi mehrere Mailanhänge in einer Schleife (https://www.delphipraxis.net/86366-mehrere-mailanhaenge-einer-schleife.html)

Andreas Schilling 13. Feb 2007 09:10


mehrere Mailanhänge in einer Schleife
 
bzw. wie erzeuge ich eine unbekannte Anzahl Variablen vom Typ TMapiFileDesc zur Laufzeit (je nachdem wieviel Dateien ich im Ordner finde).

Hier ein bisschen Quelltext
Delphi-Quellcode:
procedure SendmailMapi(...)
  var FileAttach: TMapiFileDesc;
      ...
begin
  ...

  erg := FindFirst(Ordner + '*.*', faAnyFile, Info);

  while (erg = 0) do
  begin
    try
      if (info.name <> '.')
      and (info.name <> '..')
      then begin
        // hier würde ich gerne jedes mal eine neue Variable vom Typ TMapiFileDesc erzeugen
        // ohne FileAttach2,FileAttach3 usw. vorher als Variable deklariert zu haben
        strAnhang := Ordner + Info.Name;
        FillChar(FileAttach, SizeOf(FileAttach), 0);
        FileAttach.nPosition := Cardinal($FFFFFFFF);
        FileAttach.lpszPathName := PChar(strAnhang);
        nFileCount := 1;
        lpFiles := @FileAttach;
      end;
    except
      ShowMessage('Fehler' + #13#10 +
                   exception(ExceptObject).Message);
    end;
    erg := FindNext(Info);
  end;
  FindClose(Info);
...
  // dann Mail versenden --> ist OK
end;

sh17 13. Feb 2007 09:24

Re: mehrere Mailanhänge in einer Schleife
 
Du musst die Anhand der Anzahl der Dateien dynamisch Speicher holen

Delphi-Quellcode:
var
  Attachments,Attachment : PMapiFileDesc;
  MailMessage: TMapiMessage;
begin
  ...
try
  with MailMessage do
  begin
    ...

      nFileCount := filenamelist.Count;

      if nFileCount > 0 then
      begin
        GetMem(Attachments,SizeOf(TMapiFileDesc) * filenamelist.Count);
        Attachment := Attachments;
        FOR iCount := 0 TO (filenamelist.Count - 1) do
        begin
          FileName := filenamelist[iCount];
          Attachment.ulReserved := 0;
          Attachment.flFlags := 0;
          Attachment.nPosition := ULONG($FFFFFFFF);
          Attachment.lpszPathName := StrNew(PChar(FileName));
          Attachment.lpszFileName := StrNew(PChar(ExtractFileName(FileName)));
          Attachment.lpFileType := NIL;
          inc(Attachment);
        END;
        lpFiles := Attachments;
      end
      else
      begin
        nFileCount := 0;
        lpFiles := nil;
      end;
  end;
finally
    if Assigned(MailMessage.lpFiles) then
      FreeMem(MailMessage.lpFiles, MailMessage.nFileCount * sizeof(TMapiFileDesc));
end;

end;

Andreas Schilling 13. Feb 2007 11:32

Re: mehrere Mailanhänge in einer Schleife
 
Danke für den Tip. Hat funktioniert nachdem ich
Delphi-Quellcode:
nFileCount := filenamelist.Count;
auch mit reingenommen habe. Hatte ich am Anfang nur für eine lokale Variable gehalten und ingnoriert.

Digielm 2. Nov 2009 12:10

Re: mehrere Mailanhänge in einer Schleife
 
Hallo,

habe das hier mal probiert. Bekomme aber leider immer den Result 2 zurück.

Ich weiß nicht woran das liegt. Wenn ich eine Mailversende ohne Attachments klappt alles nur wenn ich welche anhänge.

Kann mir da jemand helfen ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:57 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