Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi SMTP - Datei wird nicht mehr versendet (https://www.delphipraxis.net/84286-smtp-datei-wird-nicht-mehr-versendet.html)

albert1985 14. Jan 2007 20:08


SMTP - Datei wird nicht mehr versendet
 
Hi,
bin erst heute auf dieses Forum gestoßen und hoffe auf Hilfe bei einem kleinem Problem.
Boardsuche habe ich schon verwendet, aber ohne sehr großen Erfolg. :(
Bin auch nicht sicher ob ich das hier die richtige Stelle ist für mein Problem... bitte um Nachsicht, falls was verschoben werden muss :)

Und zwar geht um ein Problem bezüglich SMTP ...
Ich habe Indy 10 verwendet, um eine Email samt Dateianhang zu versenden und das
funktioniert auch normalerweise ohne Probleme.

Jetzt wollte ich für ein kleines Programm mit dem
ich Dateien verwalten kann noch eine Funktion einbauen, die es ermöglicht Sicherungskopien bzw. die Datei
selbst erst ab einer bestimmten Größe zu versenden ... Da kam ein Thread in diesem Forum ins Spiel, in dem
folgender Code für die Ermittlung der Dateigröße gepostet wurde:
Code:
function GetFileSize(const szFile: String): Int64;
var
  fFile: THandle;
  wfd: TWIN32FINDDATA;
begin
  result := 0;
  if not FileExists(szFile) then exit;
  fFile := FindFirstfile(pchar(szFile),wfd);
  if fFile = INVALID_HANDLE_VALUE then exit;
  result := (wfd.nFileSizeHigh*(MAXDWORD))+wfd.nFileSizeLow;
  windows.FindClose(fFile);
end;
Diesen Code habe ich erstmal so in mein Programm eingebunden, und dann folgende Zeilen hinzugefügt:
Code:
//Dateigroeße ermitteln
begin
  if GetFileSize('C:\dateiname') > 5000 then begin
danach steht dann der teil der fürs email versenden
zuständig ist ...

Es tritt jetzt zwar kein Fehler auf beim compilieren, aber die datei wird nicht versendet...

Die einzige Vermutung die ich habe, ist dass die gepostete Funktion auf die Datei zugreift und deswegen vllt.
kein Versenden möglich ist ... Ich bin verzweifelt und hab schon alles Mögliche ausprobiert :cry:

Vielleicht hat jemand von euch eine Idee ?? MfG

marabu 14. Jan 2007 21:30

Re: SMTP - Datei wird nicht mehr versendet
 
Herzlich willkommen in der Delphi-PRAXiS, Albert.

Du hast bei der Übernahme der Funktion einen Fehler übernommen und einen neuen Fehler eingeführt - diese haben aber wahrscheinlich keinen Einfluß auf dein Programm. Der Rückgabewert im Fehlerfall sollte besser -1 sein, da Null eine zulässige Dateigröße ist, und die Multiplikation mit MAXWORD verfälscht das Eregbnis, da MAXWORD um 1 zu klein ist:

Delphi-Quellcode:
function GetFileSize(const fn: TFileName): Int64;
var
  hFile: THandle;
  wfd: TWIN32FINDDATA;
begin
  Result := -1;
  hFile := FindFirstFile(PChar(fn), wfd);
  if hFile = INVALID_HANDLE_VALUE
    then Exit
    else Windows.FindClose(hFile);
  Result := Int64(wfd.nFileSizeHigh) shl 32 + wfd.nFileSizeLow;
end;
Deinen Fehler mag ich aber nicht mit dieser Funktion in Zusammenhang bringen. Hast du mal die Dateigröße geprüft, indem du einen Haltepunkt hinter den Aufruf von GetFileSize() setzt?

Freundliche Grüße vom marabu

albert1985 15. Jan 2007 18:45

Re: SMTP - Datei wird nicht mehr versendet
 
Hm, hab nochmal deine Änderungen für die Funktion mit reingenommen, aber das Problem bleibt bestehen
(wie du ja selbst schon erwartet hast ;).

Was ich vergessen hatte zu erwähnen ist, das die Datei ohne die eigentlich vorgesehene Einbindung
von DeleteFile GELÖSCHT wird (nach dem Teil für das Versenden der Mail wollte ich das einbauen), wenn die festgelegte dateigröße erreicht ist, eben ohne aber tatsächlich eine mail zu versenden !!!

PS: Wenn ich den Code folgendermaßen schreibe nachdem ich ein edit-feld zur ausgabe eingefügt habe...

Delphi-Quellcode:
GetFileSize('dateiname');
  edit1.Text := Inttostr(GetFileSize('dateiname'));
  if Inttostr(GetFileSize('dateiname')) > '5000' then
dann wird eine mail versendet ... jedoch nicht erst bei etwa 5 kb wie verlangt, sondern bereits bei 0 byte bzw.
sobald die datei existiert -.-
In Hoffnung auf Hilfe ... MfG Albert

Klaus01 15. Jan 2007 20:06

Re: SMTP - Datei wird nicht mehr versendet
 
Guten Abend,

Delphi-Quellcode:
 GetFileSize('dateiname');
  edit1.Text := Inttostr(GetFileSize('dateiname'));
  if GetFileSize('dateiname') > 5000 then  // vielleicht geht es so besser?
Grüße
Klaus

albert1985 15. Jan 2007 20:13

Re: SMTP - Datei wird nicht mehr versendet
 
Hi,

Nein, denn das ist ja genau das was ich vorher auch hatte ;)

Habs grad nochmals versucht ... das merkwürdige dabei ist, dass bei gleichem code teilweise unterschiedliche
dinge geschehen ... teilweise wird die mail gesendet, teilweise nicht, teilweise sogar mit der gewünschten größe ...
aber auch nur einmal ...

UPDATE
AHA !!! Ich hab ne mögliche Fehlerquelle gefunden :-D !

Und zwar die vorgegebene Dateigröße ... aus irgendeinem Grund funktioniert alle perfekt wenn ich
Delphi-Quellcode:
if GetFileSize('dateiname') > 500 then
setze ... datei wird beim Erreichen dieser Größe gesendet und das funktioniert dann auch stabil!
(bisher vllt. 10 Versuche ;))

Ich will natürlich wissen woran dass genau liegt ... Hat jemand eine Idee ? Hängts vielleicht mit der Zuweisung
der Funktion zu "int64" zusammen ?? Wenn ja wie kann ich diese Größe auch ohne Probleme weiter hoch schrauben ?

Klaus01 15. Jan 2007 20:23

Re: SMTP - Datei wird nicht mehr versendet
 
Nun, ich habe den Code mal mit einem Button und ShowMessage getestet.
Und dabei habe ich nur die Ausgabe von ShowMessage bekommen wenn die Datei
größer als 5000 Byte war.

Wie setzt sich denn der 'dateiname' bei Dir zusammen?
Wie schaut der Code aus der nach
Delphi-Quellcode:
if GetFileSize('dateiname') > 5000 then
kommt?

Grüße
Klaus

albert1985 15. Jan 2007 20:36

Re: SMTP - Datei wird nicht mehr versendet
 
AHA !!! Ich hab ne mögliche Fehlerquelle gefunden Very Happy !

Und zwar die vorgegebene Dateigröße ... aus irgendeinem Grund funktioniert alle perfekt wenn ich
Delphi-Quellcode:
if GetFileSize('dateiname') > 500 then
setze ... datei wird beim Erreichen dieser Größe gesendet und das funktioniert dann auch stabil!
(bisher vllt. 10 Versuche Wink)

Ich will natürlich wissen woran dass genau liegt ... Hat jemand eine Idee ? Hängts vielleicht mit der Zuweisung
der Funktion zu "int64" zusammen ?? Wenn ja wie kann ich diese Größe auch ohne Probleme weiter hoch schrauben ?

Klaus01 15. Jan 2007 20:44

Re: SMTP - Datei wird nicht mehr versendet
 
Ich glaube an Int64 brauchst Du nicht herumzuschrauben.
Wenn da der Maximalwert erreicht ist, hast Du schon eine sehr große Datei.

Aus der Delphi Hilfe:
Zitat:

Int64 –2^63..2^63–1 signed 64-bit
Grüße
Klaus

albert1985 15. Jan 2007 20:48

Re: SMTP - Datei wird nicht mehr versendet
 
Nochmal ich ... :)
Komischerweise funktionierts jetzt auch mit dem Wert 5000, hab aber keine Ahnung warum jetzt plötzlich,
da ich eigentlich nichts verändert hab ... :roll: :?:


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz