Autor Beitrag
FFKangoroo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33

WIN XP SP2
Delphi 7
BeitragVerfasst: Fr 28.04.06 23:20 
Hallo,
so ich meld mich mal wieder mit einem Probelm!(ha wer hätte das gedacht?).
Es geht immernoch in die Übergabe eines HTML codes nach Thunderbird oder Outlook mit diesem Ansatz:

Ansatz:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
 uses ShellApi;  

 
procedure SendMail(MailAddress : string;  
                   Subject : string;  
                   body : string);  
begin  
  ShellExecute(Application.Handle, 'open',  
               PChar('mailto:' + MailAddress + '?' +  
                     'subject=' + Subject + '&' +  
                     'body='+ Body), nilnil, sw_ShowNormal);  
end;




Aufruf:
ausblenden Delphi-Quelltext
1:
   SendMail('support@testdomain.de''testbetreff''<html>hier die htmlseite</hmtl>');					


Nach der Lösung des letzten Probelms ist ein neues aufgetreten, als die HTML seite etwas Umfangreicher wurde.

Denn irgendwie scheint diese Übergabe nur um die 1900-2000 Zeichen zu übergeben dann hört sie auf einfach mitten im Wort auf.
(Diesmal sind es auch keine Codeumlaute die Probleme machen).
Hat einer ne Ahnung wie man das lösen kann?

Wäre euch sehr verbunden!

Das FFKangoroo


Zuletzt bearbeitet von FFKangoroo am Mo 01.05.06 19:36, insgesamt 2-mal bearbeitet
FFKangoroo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33

WIN XP SP2
Delphi 7
BeitragVerfasst: Mo 01.05.06 14:27 
Da anscheienend kaum resonanz kommt versuch ich es mal mit einem Programmschnippsel. wo es auftaucht hier sind es fast immer um die 1854 zeichen die übergeben werden danch hört er auf!(nur zu sehen im outlook bei Thunderbird passiert nichts)

waurm?
Einloggen, um Attachments anzusehen!
FFKangoroo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33

WIN XP SP2
Delphi 7
BeitragVerfasst: Mo 01.05.06 19:38 
Ach herjemine! :oops:
Jetzt hatte ich überall anstatt Thunderbird Firefox stehen gehabt! Hoffe das hatte nicht für Verwirrung gesorgt!

Also es sind Outllok oder Thundebird(Emailclients) an die der Quelltext übergeben werden soll.

Das FFkangoroo
FFKangoroo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33

WIN XP SP2
Delphi 7
BeitragVerfasst: Do 04.05.06 14:43 
hmm, irgendwie weiss keiner wie man das lösen kann oder wie darf ich das Schweigen deuten?

was sagen denn die dazu die es ausprobiert haben? ist es bei euch auch so passiert? oder klappte es?

wäre schön wenn wenigstens eine resonanz käme.

danke trotzdem !

DAs FFkangoroo
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Do 04.05.06 14:51 
Hallo,

ich hab gerade kein Delphi vor mir, aber soweit ich weiss gibt es Server-Komponenten auch für Outlook. Mit diesen könntest du zumindest mal direkt Outlook ansprechen ohne diesen schlechten Umweg über ShellExecute. Für Thunderbird müsstest du dich halt mal mit deren API auseinandertsetzen, könnte aber aufwendiger werden.

Viele Grüße,
Hape

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
FFKangoroo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33

WIN XP SP2
Delphi 7
BeitragVerfasst: Fr 05.05.06 10:14 
Titel: Pchar als mögliche Ursache?
Also mit dieser Outlook komponente kam ich irgendwie nicht klar ... muste mich mal länger mit beschäftigen.

NAch einem Kleinen Geistesblitz beim durchstöbern der einiger anderer Threads, bin ich zu der Vermutung gekommen dass Pchar an allem schuld is :!: hab daraufhin mal die delphi hilfe befragt die sagt das:
Zitat:

Konvertierungen langer Strings in PChars werden nicht automatisch durchgeführt. Auf Grund bestimmter Unterschiede zwischen Strings und PChars können bei Konvertierungen Probleme auftreten:

Lange Strings werden mit Referenzzählern verwaltet, PChars nicht.
Bei der Zuweisung an einen String werden die Daten kopiert, während ein PChar ein Zeiger auf eine Speicheradresse ist.
Lange Strings sind nullterminiert und enthalten zusätzlich eine Längenangabe, PChars sind einfach nullterminiert.


des weiteren heisst es dann:
Zitat:

Lokale Variable als Pchar übergeben

In bestimmten Fällen liegt eine lokale String-Variable vor, die durch den Aufruf einer Funktion initialisiert werden muss, die ihrerseits einen PChar als Parameter entgegennimmt. Eine mögliche Lösung ist die Erstellung eines lokalen array of char, das dann an die Funktion übergeben wird. Nach Ausführung der Funktion kann die Variable einem String zugewiesen werden:

// FillBuffer ist hier eine vordefinierte Funktion
function FillBuffer(Buf:PChar;Count:Integer):Integer
begin
. . .
end;
// MAX_SIZE ist hier eine vordefinierte Konstante
var
i: Integer;
buf: array[0..MAX_SIZE] of char;
S: string;
begin
i := FillBuffer(0, buf, SizeOf(buf)); // behandelt buf als PChar
S := buf;
// Anweisungen
end;

Diese Lösung ist hilfreich, wenn der Puffer relativ klein ist, da dieser auf dem Stack zugeordnet wird. Gleichzeitig handelt es sich um eine sichere Lösung, da die Konvertierung zwischen array of char und string automatisch erfolgt. Nachdem buf dem String zugewiesen wurde, wird die Länge (Length) des String automatisch auf den richtigen Wert eingestellt.

Um den zusätzlichen Aufwand beim Kopieren des Puffers zu vermeiden, können Sie den String in einen PChar umwandeln, sofern die Routine nicht voraussetzt, dass der PChar im Speicher erhalten bleibt. Die Synchronisation der String-Länge erfolgt jedoch nicht automatisch wie bei der Zuweisung von array of char an string. Sie sollten die Länge des Strings mit der Funktion Length zurücksetzen, damit sie der tatsächlichen Länge entspricht. Wenn Sie eine Funktion verwenden, welche die Anzahl der kopierten Bytes zurückgibt, ist dies in nur einer Zeile Quelltext möglich:

var
S: string;
begin
SetLength(S, MAX_SIZE; // Bei Umwandlung in einen PChar darf der String nicht leer sein
SetLength(S, GetModuleFilename( 0, PChar(S), Length(S) ) );
// Anweisungen
end;


Aber damit kann ich überhaupt nichts anfangen kann mir das einer vielleicht erläutern?

danke!

Das FFKangoroo