8. Oktober 2012 13:48
lText1024 := '0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789' +
'0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789' +
'0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789' +
'0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789' +
'0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789' +
'0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789' +
'0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789' +
'0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789' +
'0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789' +
'0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789' +
'012345678901234567890123';
NewChildNode.text := lText1024 + lText1024;
8. Oktober 2012 14:00
8. Oktober 2012 14:02
8. Oktober 2012 14:06
8. Oktober 2012 14:34
8. Oktober 2012 14:37
10. Oktober 2012 09:15
CLEAR(TempBlob.Blob);
TempBlob.Blob.CREATEOUTSTREAM(Outstr);
XmlDoc.save(Outstr);
10. Oktober 2012 10:43
mikka hat geschrieben:Aber eigentlich kann ich mir nicht so recht vorstellen, dass es nicht möglich sein soll, beliebig viele Zeichen zu schreiben.
10. Oktober 2012 14:35
10. Oktober 2012 15:35
fiddi hat geschrieben:Zu deinem Mail- Problem:
die CU 397 hat die schöne Funktion AddBodyLine, die ist in der aktuellen Version nicht mehr zeilenweise, d.h. wenn man kein CRLF in den TExt einfügt, dann macht die auch keine Vorschub im MailBody.
10. Oktober 2012 15:43
Das würde ich gerne nutzen, aber die aktuellen (auf Outlook abgestimmten) Mailautomations funktionieren leider nicht mit zusammen mit Lotus Notes, deshalb kann ich leider nur das einfache MAPI nutzen. Mehr als 1024 Zeichen kann ich nicht in den MsgNoteText zuweisen, sonst bekomme ich auch einen Stackspeicherfehler wie Mikka oben.
10. Oktober 2012 17:42
fiddi hat geschrieben:2. Die Funktion AddBoddyline enthält Funktionsaufrufe aus "BSTRConverterBody", die haben nichts mit MAPI zu tun.
fiddi hat geschrieben:bzw. große Variablen als globale Variablen anlegen, dann landen Sie nicht auf dem Stack
TempBlob.DELETEALL;
TempBlob."Primay Key" := 1;
TempBlob.INSERT;
TempBlob.Blob.CREATEOUTSTREAM(MailOutStream);
MailOutStream.WRITETEXT(GanzLangerText);
MailOutStream.WRITETEXT();
... // hier folgen etliche weitere WRITETEXT-Zeilen
TempBlob.MODIFY;
// nur zur Kontrolle auch als Datei exportieren
TempBlob.Blob.EXPORT('C:\KontrolldateiMailInhalt.txt',FALSE);
TempBlob.Blob.CREATEINSTREAM(MailInStream);
TempBlob.CALCFIELDS(Blob);
TestBigText.READ(MailInStream);
TestBigText.GETSUBTEXT(MailBodyText,1);
MessageLength := MailBodyText.LENGTH;
IF MessageLength IN [1..1024] THEN BEGIN
MailBodyText.GETSUBTEXT(FirstSegment,1,1024);
MAPIMessages.MsgNoteText := FirstSegment;
END ELSE IF MessageLength IN [1025..2048] THEN BEGIN // das geht noch durch
MailBodyText.GETSUBTEXT(FirstSegment,1,1024);
MailBodyText.GETSUBTEXT(SecondSegment,1025,1024);
MAPIMessages.MsgNoteText := FirstSegment + SecondSegment;
END ELSE IF MessageLength IN [2049..3072] THEN BEGIN // das nicht mehr, Abbruch wegen Stacküberlauf
MailBodyText.GETSUBTEXT(FirstSegment,1,1024);
MailBodyText.GETSUBTEXT(SecondSegment,1025,1024);
MailBodyText.GETSUBTEXT(ThirdSegment,2049,1024);
MAPIMessages.MsgNoteText := FirstSegment + SecondSegment + ThirdSegment;
END
10. Oktober 2012 21:39
i:=1;
SegLen := 1024;
while (i < Mailbodytext.length) do begin
if (MailBodyText.length -i) < SegLen then
SegLen := MailBodyText.length -i;
MailBodyText.getsubtext(Segment,i,Seglen);
APIMessages.MsgNoteText += Segment;
end;
11. Oktober 2012 12:15
fiddi hat geschrieben:
- Code:
i:=1;
SegLen := 1024;
while (i < Mailbodytext.length) do begin
if (MailBodyText.length -i) < SegLen then
SegLen := MailBodyText.length -i;
MailBodyText.getsubtext(Segment,i,Seglen);
APIMessages.MsgNoteText += Segment;
end;
funktioniert nicht? (Code nicht getest)
Gruß, Fiddi
MAPIMessages.MsgNoteText := MAPIMessages.MsgNoteText + Segment;
11. Oktober 2012 13:07
11. Oktober 2012 13:22
fiddi hat geschrieben:Warum benutzt du nicht MAPIMessages.Body anstatt MAPIMessages.MsgNoteText?
11. Oktober 2012 14:24
i:=1;
SegLen := 1024;
while (i < Mailbodytext.length) do begin
if (MailBodyText.length -i) < SegLen then
SegLen := MailBodyText.length -i;
MailBodyText.getsubtext(Segment,i,Seglen);
APIMessages.MsgNoteText .= Segment;
end;
11. Oktober 2012 15:47
fiddi hat geschrieben:Probier doch mal folgendes:
- Code:
i:=1;
SegLen := 1024;
while (i < Mailbodytext.length) do begin
if (MailBodyText.length -i) < SegLen then
SegLen := MailBodyText.length -i;
MailBodyText.getsubtext(Segment,i,Seglen);
APIMessages.MsgNoteText .= Segment;
end;
Der einzige Unterschied ist das fehlende '+'. D.h. die simple Zuweisung fügt das neue Segment an.
i += STRLEN(Segment);
11. Oktober 2012 16:03
11. Oktober 2012 16:41
Prinzipiell schon, aber wenn man mit AddBodyLine den BSTRConverterBody füllt und dann in den MsgNoteText zuweist, dann ist beim Zeichenpuffer wieder Endstation, wenn 1024 Zeichen überschritten werden. Die einzelnen Komponenten können jede für sich sicher mehr.fiddi hat geschrieben:Wenn ich das eben richtig im OCX gesehen habe, dann erwartet MsgNoteText Als Zuweisung einen BSTR und das ist genau das Ergebnis von BSTRConverterBody.BSTR, womit wir wieder am Anfang meiner Ausführungen wären
11. Oktober 2012 17:05
12. Oktober 2012 09:29
fiddi hat geschrieben:Ruf das mal als Funktion auf MsgNoteText(BSTR);
15. Oktober 2012 14:16
Kowa hat geschrieben:Das BLOB manuell auszulesen geht auch (Link), das komplette Auslesen erledigt die EXPORT-Funktion aber direkt.
TempBlob.Blob.CREATEINSTREAM(MailInStream);
AttachmentFile.CREATE(AttachmentPathAndName);
AttachmentFile.WRITEMODE(TRUE);
AttachmentFile.TEXTMODE(TRUE);
WHILE NOT MailInStream.EOS DO BEGIN
MailInStream.READTEXT(ExportLine);
ExportLine := DELCHR(GeneralMgt.Ascii2Ansi(ExportLine),'<',' ');
AttachmentFile.WRITE(ExportLine);
END;
AttachmentFile.CLOSE;