Autor Thema: Body-Feld einer E-Mail im HTML Format in eine Datei exportieren  (Gelesen 1098 mal)

Offline Legolas

  • Senior Mitglied
  • ****
  • Beiträge: 446
  • Geschlecht: Männlich
Hallo Forum,

kann mir hier jeamand weiter helfen!
Ich sehe den Wald wohl vor lautre Bäumen nicht mehr.

Was möchte ich tun:

Ich benötige aus einem "Memo" Dokument das Body-Feld im HTML-Format, das ich in eine Datei exportieren möchte.
Mit meinem Code funktioniert das auch teilwiese.

Folgende Probleme habe ich:
- Das Body Feld HTML im DXL Export wird nach 72 Zeichen immer umgebrochen und ich wies nicht warum.
- Umlaute werden nicht korrekt maskiert.

- Das System verhält sich mit dem Formname "Memo" anders als mit dem Formnamen "MemoDummy"?

Kann mir jemand wieterhelfen?
Das kann doch nicht so schwer sein.


Code
	Dim ses As New NotesSession
	Dim coll As NotesdocumentCollection
	Dim maildoc As NotesDocument
	Dim item As NotesItem
	Dim rtItem As NotesRichTextItem
	Dim objAttachment  As NotesEmbeddedObject
	
	' Markiertes Dokument kopieren
	Set coll = ses.Currentdatabase.Unprocesseddocuments
	Set mailDoc = coll.Getfirstdocument()
	
	'Dateianhänge aus dem Body Feld löschen
	Set rtItem = mailDoc.Getfirstitem("Body")
	ForAll o In rtItem.EmbeddedObjects
		Set objAttachment = Nothing
		Set objAttachment = rtItem.Getembeddedobject(o.name)
		
		If Not objAttachment Is Nothing Then
			Call objAttachment.Remove()
		End If
	End ForAll
	
        'Alle nicht benötigten Felder löschen
	ForAll it In mailDoc.Items
		select Case LCase(it.name)
			Case "subject",  "sendto", "copyto", "blindcopyto", "from", "body"
				' Nicht tun
			Case Else
				' Alle andere Felder löschen
				Call it.remove
		End Select		
	End ForAll

	Call mailDoc.save(True, False)

	' Body Feld konvertieren
	Dim mime As NotesMIMEEntity
	ses.ConvertMIME = False
	Call maildoc.Converttomime(2)
	Call mailDoc.save(True, False)

	' Dokument bzw. Body Feld exportieren
	' Hinweis: Funktioniert NICHT beim Exportversuch als Stream. Warum auch immer!!
	Dim exporter As NotesDXLExporter
	Dim strOutput As String
	Dim filenum As Integer
	Set exporter = ses.CreateDXLExporter
	exporter.mimeOption =0

	strOutput = exporter.Export(maildoc)

	filenum = FreeFile
	Open "c:\temp\DXL-Export.dxl" For Output As filenum CHARSET="utf-8"
	Write #filenum, strOutput
	Close filenum

Grüße
Bernd
« Letzte Änderung: 09.08.24 - 08:39:53 von Legolas »
Arbeite klug, nicht hart.

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.290
  • Geschlecht: Männlich
Ich würde das Ganze pragmatisch lösen, d.h. nach der Erstellung der DXL-Datei diese einlesen und dann beim Schreiben die Zeilenumbrüche und Sonderzeichen den eigenen Bedürfnissen anpassen ...
Gruss Erik :: Freelancer :: KI-Dev, Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16 / OLI 1.0

--
Nur ein toter Bug, ist ein guter Bug!

Offline Legolas

  • Senior Mitglied
  • ****
  • Beiträge: 446
  • Geschlecht: Männlich
Hi jBubbleBoy,

danke für die Rückmeldung.
Nur was ich mir einfach nicht vorstellen kann ist, dass selbst Notes im Jahr 2024 immer noch nicht den Mailinhalt als HTML exportieren kann.
Da gibt’s doch sicherlich schon irgendeine Lösung.
Ich bin ja wohl nicht der erste auf der Welt, der diese Funktionalität benötigt.

Das Problem bei der manuellen variante ist leider, dass die Funktion international bei diversen Sprachen zum Einsatz kommt.

Grüße
Bernd
Arbeite klug, nicht hart.

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.290
  • Geschlecht: Männlich
Notes / Domio ist ein geschlossenes System, wo der Quellcode nicht öffentlich verfügbar ist, was Vor- und Nachteile hat. Ein Nachteil ist, dass Fehler im Unterbau nicht direkt behoben werden können, sondern ein Ticket bei HCL erstellt werden muss. Zu deiner Meldung mit dem Zeilenumbruch kenne ich keine Option / Eigenschaft die das beim DXL Export regelt und zu den Sonderzeichen fällt mir auch nur die Angabe von CHARSET="utf-8" ein.

Aber vielleicht gibt es ja noch andere Lösungen, z.B. als PDF oder EML speichern / konvertieren, aber ich kenne deine Anforderung nicht. Das einzige komische an deinem Code ist, dass keine Kopie der Mail vor dem Export erstellt wird bzw. die Mail auch über NotesDocument gespeichert wird und das obwohl es einen Kommentar "Markiertes Dokument kopieren" gibt, vielleicht hast du auch nur ein Teil des Codes veröffentlicht :-:
Gruss Erik :: Freelancer :: KI-Dev, Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16 / OLI 1.0

--
Nur ein toter Bug, ist ein guter Bug!

Offline CarstenH

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 664
  • Geschlecht: Männlich
Ich benötige aus einem "Memo" Dokument das Body-Feld im HTML-Format

Die Funktion ist zwar ab R11 "veraltet" aber funktionierte bei mir bis zuletzt noch überall, wo ich sie mal gebraucht hatte.

Code
HTMLStrings$ = NotesRichTextItem.Converttohtml([options] ) As String

Beschreibung: https://help.hcl-software.com/dom_designer/9.0.1/appdev/H_CONVERTOHTML_METHOD_NOTESRICHTEXTITEM.html

Das Body Feld HTML im DXL Export wird nach 72 Zeichen immer umgebrochen und ich wies nicht warum.

"There are two limits ... on the number of characters in a line.
Each line of characters MUST be no more than 998 characters, and SHOULD be no more than 78 characters, excluding the CRLF."

http://www.ietf.org/rfc/rfc2822.txt

Achtung, hier kommt jetzt eine Vermutung: die tatsächlich verwendete Zeilenlänge könnte sich der ausführende Prozess aus den Einstellungen am Client holen, beim Server hängt die konkrete Länge und Position der Einstellung vermutlich davon ab, ob die MIME-Konvertierung durch LS, HTTP, Router, IMAP oder POP getriggert wird. Außerdem ist bei MIME Mails keine erneute Konvertierung notwendig, hier muss man aufpassen, wenn man per LS zugreift, damit man nicht das vorhandene MIME in RT konvertiert, um danach wieder zurück nach MIME zu konvertieren. Jede Konvertierung verursacht Reibungsverluste.

Umlaute werden nicht korrekt maskiert.

 ???

Das System verhält sich mit dem Formname "Memo" anders als mit dem Formnamen "MemoDummy"?

Anhand der Formularnamen "Memo" und "Reply" erkennen die Exportroutinen eine Mail.

Nur was ich mir einfach nicht vorstellen kann ist, dass selbst Notes im Jahr 2024 immer noch nicht den Mailinhalt als HTML exportieren kann.

Klar, das kann Notes durchaus seit Jahren, Outlook hingegen kann es nicht mal im Jahr 2024.
 
Allerdings verstehe ich nicht, was du genau bezweckst, wenn ich "HTML-Mail" lese, wo "MIME-Format" stehen sollte. Und natürlich müssen (wie bei anderen Mailclients auch) schon ein paar Randbedingungen erfüllt sein. Zum Beispiel die, dass man eine Mail, die man exportieren möchte, nicht im ersten Schritt mal eben zerstört indem mal Felder, von denen man glaubt, dass sie nicht benötigt werden, löscht. Oder was ist, wenn die Mail bereits im MIME-Format vorliegt? Oder die MIME-Parts enthalten vielleicht gar kein HTML sondern nur Plain-Text oder Attachments, was dann? Also nochmal Butter bei die Fische - was ist der Zweck des Ganzen?

Und wann wurde in deinem Post aus "Body-Feld einer E-Mail im HTML-Format exportieren" ein "E-Mail als HTML exportieren"? Das sind völlig verschiedene Dinge. Auf die erste Variante habe ich dir gleich zu Anfang eine mögliche Lösung genannt: NotesRichTextItem.ConvertToHTML

Der EML-Export hingegen ist komplexer, entweder machst du es über die dafür vorgesehenen Funktionen (Drag&Drop, DXL) oder passt dir funktionierenden Code anderer Mitstreiter an, da wird man hier im Forum mehrfach fündig, z.B. hier: https://atnotes.de/index.php/topic,61734.msg394786.html#msg394786

HTH
Carsten
« Letzte Änderung: 09.08.24 - 13:08:55 von CarstenH »

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.290
  • Geschlecht: Männlich
Umlaute werden nicht korrekt maskiert.

 ???

"Theoretisch" könnte man die Sonderzeichen auch von einem KI-Agenten korrigieren lassen, wenn man Bock auf neue Technologien hat.
Gruss Erik :: Freelancer :: KI-Dev, Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16 / OLI 1.0

--
Nur ein toter Bug, ist ein guter Bug!

Offline Legolas

  • Senior Mitglied
  • ****
  • Beiträge: 446
  • Geschlecht: Männlich
Hallo Zusammen,

ich glaube es gibt hier aufgrund meiner Erklärung was das eigentliche Ziel sein soll, Missverständnisse.

Endziel:
Ich möchte in einer E-Mail im Body Feld externen HTML code im Backend einfügen. (Dieser HTML Code ist formatiert. Mit: Tabellen, Farben usw.)
Optional am Angang oder Ender des Body Feldes.

Mein geplantes vorgehen:
1) Bestehend E-Mail in Mime konvertieren
2) Dann als DXL exportieren
3) Nach dem <Body> Tag an der gewünschten Stelle den externen HTML Code einfügen.
4) DXL wieder in ein neues Dokument importieren.

-> Das funktioniert rein technisch auch. Das Ergebnis ist aber katastrophal.
Der HTML Code wird ziemlich zerschossen. (Tabellenrahmen werden angezeigt, Abstände stimmen nicht mehr, Formatierung ist falsch, usw.)
Sieht also nur annähernd noch so aus wie im Browser angezeigt.

Infos:
1) Der HTML Code beinhaltet keine CSS Infos
2) Das Kennzeichen in den Maskeneigenschaften "In Notes als HTML rendern" ist gesetzt. (Hab's auch schon rausgenommen, ergibt keine Änderung)
 
Was mache ich falsch?

Ergänzung:
Oder weis jemand, wie man eine EML Datei im Backend in ein Notes Dokument importiert?

Grüße
Bernd

« Letzte Änderung: 16.08.24 - 13:28:20 von Legolas »
Arbeite klug, nicht hart.

Offline Erik Schwalb

  • Junior Mitglied
  • **
  • Beiträge: 51
Was ist denn der use case hinter dieser technischen Aufgabenstellung?

Sollen hier bereits bestehende (d.h. empfangene) Mails "nachbearbeitet" / ergänzt werden? Wenn ja, zu welchem Zweck?

Oder geht es hier darum, vor dem Versand neuer Mails diese noch mit extern definierten Inhalten zu ergänzen? Auch hier: Welchem Zweck dient das?

Offline Legolas

  • Senior Mitglied
  • ****
  • Beiträge: 446
  • Geschlecht: Männlich
Hallo Erik,

es geht darum, ein bestehendes Notes E-Mail Bodyfeld um einen HTML Code (Tabellen, Links, usw.) zu ergänzen, der bei gewissen Situationen an externe Kunden versendet werden muss.
HTML daher, weil hier die otische Darstellung der Infos an die Kunden sehr wichtige ist!

Gruß
Bernd
Arbeite klug, nicht hart.

Offline Erik Schwalb

  • Junior Mitglied
  • **
  • Beiträge: 51
Danke für die Erläuterung.
Wenn der Absender sicherstellen möchte, dass der Inhalt beim Empfänger "möglichst hübsch" dargestellt wird, wäre es dann ggf. auch denkbar, den Inhalt z.B. als PDF zu versenden? Mir ist natürlich klar, dass der Empfänger dann einen Mausklick mehr machen müsste um den Inhalt sehen zu können.

Offline Legolas

  • Senior Mitglied
  • ****
  • Beiträge: 446
  • Geschlecht: Männlich
Hallo Erik,

ist keine Option!
Die ergänzende Info muss zum Beginn der E-Mail an den Empfänger eingesetzt werden und sofort erkennbar sein.

Gruß
Bernd
Arbeite klug, nicht hart.

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.290
  • Geschlecht: Männlich
Funktioniert denn ein normaler DXL-Export / -Import einer HTML-Mail, also ohne Anpassung der DXL-Datei problemlos?

Und wer erstellt die HTML-Mail und wie?
Gruss Erik :: Freelancer :: KI-Dev, Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16 / OLI 1.0

--
Nur ein toter Bug, ist ein guter Bug!

Offline Werner Götz

  • Aktives Mitglied
  • ***
  • Beiträge: 244
  • Geschlecht: Männlich
Die ursprüngliche Mail ist also im Richtext-Format?

Könntest Du dann nicht den Header als PassThruHTML einfügen und Notes den Rest machen lassen?

-Werner

Offline Legolas

  • Senior Mitglied
  • ****
  • Beiträge: 446
  • Geschlecht: Männlich
Hi,
das war auch meine erste Idee.

PassThruHTML wird aber in einem RT-Feld nicht formatiert dargestellt.
Ich meine, es wird nur als speziell markierter HTML-Code angezeigt und nur im WEB dann formatiert dargestellt. Nicht im Notesclient
Siehe Anhang.

Falls es doch eine Möglichkeit gibt HTML im RT-Feld darzustellen bin ich dir für eine Lösung natürlich sehr dankbar ! ;-)

LG
Bernd
Arbeite klug, nicht hart.

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.290
  • Geschlecht: Männlich
Achso, das ist ja gar kein HTML-Feld, es soll nur HTML hinzugefügt werden ;)

Schon mal versucht mit doc.Rendertortitem 2 RT-Felder in ein RT-Feld umzuwandeln? Dazu müsste man eine leere Maske nur für dieses Rendern + die 2 RT-Felder verwenden, ein normales RT-Feld und das andere wäre das HTML-Feld, welches hinzugefügt werden soll.

https://help.hcl-software.com/dom_designer/9.0.1/appdev/H_RENDERTORTITEM_METHOD.html
Gruss Erik :: Freelancer :: KI-Dev, Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16 / OLI 1.0

--
Nur ein toter Bug, ist ein guter Bug!

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Hallo, ichnbin leider schon eine Weile raus aus der Notes Entwicklung, aber vor einigen Jahren habe ich ziemlich viel mit HTML und MIME items gemacht. Dieee bieten direkten Zugriff auf HTML in Richtextfeldern (sofern sie vom Typ 25 sind)

Damals habe ich das hier zusammengefasst
https://atnotes.de/index.php?topic=52040.0
Ich weiß nicht, was davon heute noch funktioniert, aber vielleicht hilft es dir in die richtige Richtung

Gruß Roland
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz