Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi ShellExecute -> EMail (https://www.delphipraxis.net/53396-shellexecute-email.html)

Urba 15. Sep 2005 14:15


ShellExecute -> EMail
 
Hallo Leute,

Ich verwende

Delphi-Quellcode:
var strparam,strsubject,strbody,stremail : String;
//...
strparam := 'mailto:' + stremail + '?subject=' + strsubject + '&body=' + strbody;
ShellExecute(Handle,'open',PChar(strParam),nil,nil,SW_SHOWNORMAL)
um das Standartemailprogramm zu starten und die EMail zum Versenden vorzubereiten. Jetzt habe ich allerdings festgestellt dass es aber ab einer bestimmten Bodylänge (~ 2000 Zeichen) überhaupt nicht mehr funktioniert. Es passiert gar nichts. Kann mir das jemand erklären ?

Gruß
Urba

Urba 16. Sep 2005 12:12

Re: ShellExecute -> EMail
 
niemand ? :gruebel:

himitsu 16. Sep 2005 12:17

Re: ShellExecute -> EMail
 
Na vielleicht ist einfach der Textpuffer, welchen ShellExecute zum übermitteln der Daten verwendet einfach nicht größer.

shmia 16. Sep 2005 12:54

Re: ShellExecute -> EMail
 
Zitat:

Zitat von Urba
...um das Standartemailprogramm zu starten und die EMail zum Versenden vorzubereiten. Jetzt habe ich allerdings festgestellt dass es aber ab einer bestimmten Bodylänge (~ 2000 Zeichen) überhaupt nicht mehr funktioniert. Es passiert gar nichts. Kann mir das jemand erklären ?

Das hängt vom EMail Client ab.
Vermutung:
der Client ist in C/C++ programmiert.
Da ist es gang und gebe, einen festen Puffer für Stringverarbeitung einzusetzen.
Auch in der RTL/VCL von Delphi gibt es leider ähnliche Limitierungen.
Ein Beispiel; die Format Funktion kann max. 4096 Zeichen verarbeiten:
Delphi-Quellcode:
procedure FmtStr(var Result: string; const Format: string;
  const Args: array of const);
var
  Len, BufLen: Integer;
  Buffer: array[0..4097] of Char; // <-- schon S......
begin
  BufLen := SizeOf(Buffer);

Urba 16. Sep 2005 15:28

Re: ShellExecute -> EMail
 
OK danke für eure Antworten, aber es muss doch möglich sein mehr als diesen festen Puffer an eine Anwendung zu übergeben oder ? Wir nutzen zum beispiel im Geschäft auch ein programm welches EMailtext an den EMailClient übergibt und dort hatte ich noch nie Probleme größere EMails weiterzugeben :gruebel:

Gruß
Urba

Luckie 16. Sep 2005 15:36

Re: ShellExecute -> EMail
 
Mit Shellexecute aber offensichtlich nicht. Wer weiß wie das bei euch im Geschäft realisiert ist, wie dort mit dem E-Mail Client kommuniziert wird.

shmia 16. Sep 2005 16:21

Re: ShellExecute -> EMail
 
Ich versuch's nochmal:
Es gibt 3 Fehlerquellen, die verhindern, dass die Daten komplett ankommen.
1.) Deine Daten enthalten #0
Delphi-Quellcode:
strparam := 'mailto:' + stremail + '?subject=' + strsubject + '&body=' + strbody;
if Length(strparam) <> StrLen(strparam) then
   ShowMessage('Achtung ! Body (oder subject) enthält min. ein NUL-Zeichen');
2.) Das Betriebssystem ist nicht in der Lage eine beliebig Grosse Menge an Kommandozeilenparametern zu übergeben.
Falls dies so ist, dann gibt es wahrscheinlich Unterschiede zwischen den versch. Windows Versionen.
Hier könnte man Testprogramme schreiben, um diese Limits auszuloten.

3.) Das Limit liegt, wie von mir beschrieben am EMail-Client.
Jeder EMail-Client ist verschieden! Kann sein, eine neuere Version kann es besser als eine alte Version.
MS Outlook 98 kann z.B. mit 'body=' gar nix anfangen.
Wenn's ganz blöd läuft, kann es im EMail-Client auch zu einem Bufferüberlauf mit anschliesendem Absturz kommen.

himitsu 17. Sep 2005 11:30

Re: ShellExecute -> EMail
 
Wieviel in den den Windowspuffer reingeht, hatten wir doch schonmal hier irgendwo rausgefunden ... ich weiß nur nicht mehr wo und bei welchem Theme ... allerdings müßte da auch ein Beitrag von mir mit drin sein (schränkt schonal die Suche ein -.-'')

Urba 20. Sep 2005 17:52

Re: ShellExecute -> EMail
 
Hallo Leute,

Danke für eure zahlreichen Antworten, aber richtig weitergekommen bin ich dennoch. Ich habe auch die Tests wie shmia beschrieben gemacht, konnte allerdings nicht finden. Nochmals zu dem Programm was wir im Geschäft benutzen. Es ist an KEINEN STANDARTEMAILCLIENT gebunden, sprich es schickt was es schicken soll an den Standartemailclient. Damit muss es doch im Prinzip auch ShellExecute o.ä. benutzen oder irre ich mich? Ich verzweifel noch ... gibt es eine andere Möglichkeit die Daten zu übergeben ?

Gruß
Urba

himitsu 21. Sep 2005 16:53

Re: ShellExecute -> EMail
 
Da du einen Derartigen Puffer ja nicht umgehen kannst,

könntest du es mal per DDE/OLE-Schittstelle versuchen ... damit sollte es möglich sein.
Aber frag mich nicht wie -.-''


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:13 Uhr.
Seite 1 von 2  1 2      

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