Autor Thema: MIME Mail manipulieren  (Gelesen 6038 mal)

Offline Legolas

  • Senior Mitglied
  • ****
  • Beiträge: 446
  • Geschlecht: Männlich
MIME Mail manipulieren
« am: 17.11.10 - 10:20:43 »
Hallo Forum,

hat von Euch jemand einen best practice weg zum folgenden Problem:
Ich möchte in einer Anwendung, die E-Mails im Backend versendet, einen definierten Textblock an den Anfang der zu senden E-Mai setzen.

Zur Anwendung:
1) Der User erstellt eine individuelle E-Mail die im MIME-HTML-Format zum senden in der Anwendung abgespeichert wird.
2) Im Backend soll nun eine Funktion die gespeicherte E-Mail mit Text aus einem Profildokument ergänzen.
3) Der Ergänzungstext soll am Anfang der Mail eingefügt werden!

Wie kann man in einer MIME-Mail am einfachsten individuellen Text am Anfang der Mail einfügen?


Gruß
Bernd


Arbeite klug, nicht hart.

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: MIME Mail manipulieren
« Antwort #1 am: 19.11.10 - 18:36:11 »
Schau dir die NotesMimeEntity - Klasse mal an.

Kurz und Quick&dirty:
- du merkst dir session.convertMime
- session.convertMime = false '
- du holst dir das root-Mime mit document.getMimeEntiy
- du suchst mit getNextEntity solange bis du ein entity findest das vom contentType/subtype = "text/html" ist.
- dann liest du das Entity mit getContentAsText in einen Notesstream ein, veränderst den HTML-Stream passend (musst ggf. bis zum ersten HTML-Tag parsen)
- den Stream schreibst du mit setContentFromText(stream, "text/html; charset=utf-8", ENC_NONE) wieder zurück.
- Das Selbe machst du zwecks Kompatibilität noch für "text/plain"
- Das Mimeentity im Doc updaten mit doc.closeMimeEntity(true)
- session.convertMime nach Verarbeitung wieder auf gemerkten Wert herstellen.

Obige Vorgehensweise berücksichtigt ggf. nicht alle Eventualitäten, z.B. kann es sein, dass auch eine HTML-Datei im Anhang gefunden wird. Du wirst dich auch mit Enconding-Problemen und dergleichen rumärgern dürfen, man sollte auch IMMER ein closeMimeEntiy aufrufen, bevor man wieder über das Item-Interface zugreift.... habe mich schon oft mit/über diese Mime-Items geärgert, weil sie alles andere als einfach zu handeln sind.

ACHTUNG: komm nicht auf die Idee so ein RTF-Item mit aktiver MIME-Option in eine TEILmaske zu packen. Es verschwinden Inline-Images und eine "Cannot save Bitmap to Disk" Fehlermeldung verhindert manchmal das Speichern, wenn "kaputte" Bilder drin sind  >:D >:D
so genug gelästert... hoffe konnte dir trotzdem ein wenig weiter helfen.

Gruß
Roland
Roland Praml

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

Offline Legolas

  • Senior Mitglied
  • ****
  • Beiträge: 446
  • Geschlecht: Männlich
Re: MIME Mail manipulieren
« Antwort #2 am: 22.11.10 - 14:17:40 »
Hallo Roland,

danke für die Rückmeldung.
Es funktioniert so zumindest prinzipiell.
Es gibt jedoch noch drei Punkte die ich nicht nachvollziehen kann:

1) Das Ganze funktioniert ohne den Befehl "Call doc.closeMimeEntity(True)".
Laut deinem Posting und der Doku sollte der Befehl jedoch verwendet werden!
Der Befehl generiert jedoch den folgenden Fehler: "Illegal use of PROPERTY (189)"
Auch mit den Parametern "Call doc.closeMimeEntity(False, "Body")" usw.
Warum??

2) Wie kann ich eine Codierung von Beispielsweise: "ISO-8859-1"/"quoted-printable" auf
"UTF-8"/"quoted-printable" ändern?
Sämtlich Versuche dies irgendwie hinzubekommen sind bislang gescheitert!!
Hat jemand einen Tipp?

3) Warum werden die Umlaute beim Zurückschreiben des MIME-Inhalts mit dem gleichen Char-Set und der gleichen Codierung nicht mehr erkannt?
Es funktioniert nur wenn ich ohne Coderung "ENC_NONE" zurückschreibe.

Hat jemand eine Idee?

Grüße
Bernd
Arbeite klug, nicht hart.

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: MIME Mail manipulieren
« Antwort #3 am: 22.11.10 - 17:44:35 »
Hallo Bernd,

1.) obiger Code war aus dem Stegreif, der korrekte Name (soeben nochmal in der Hilfe nachgesehen) lautet "CloseMIMEEntities".
Wenn du den Befehl vergisst, kann es sein dass der server crashed.

2.) mit notesMIMEEntity.GetContentAsText( stream [, decoded ] ) und decoded=TRUE solltest du immer einen Stream bekommen, der von Notes lesbar ist.
Ist der Content als ISO-8859-1/quoted-printable codiert, encodiert Notes diesen (soweit ich weiß) immer korrekt in den Stream.

2b) Das Rückschreiben muss mit SetContentFromText( stream, contentType, encoding ),  contentType="text/html; charset=UTF-8", encoding = ENC_NONE erfolgen. (Hab ich zumindest durch ausprobieren(!) herausgefunden, ggf kannst du auch das Charset vom Stream abfragen.)

2c) Um das Encoding zu ändern kannst du danach z.B. EncodeContent(...) aufrufen. Ob und wie man das Charset ändern kann weiß ich nicht
[OT]So ein MIME-Entity eignet sich übrigens auch gut um von/zu Base64 zu konvertieren[/OT]

3)
Zitat
...Du wirst dich auch mit Enconding-Problemen und dergleichen rumärgern dürfen...
...weil sie alles andere als einfach zu handeln sind...
Sag nicht ich hätte dich nicht gewarnt. ;D ;D Vielleicht hilft aber das schon, in dem du immer als UTF-8 zurück schriebst, wie in 2b erwähnt

Gruß
Roland








« Letzte Änderung: 22.11.10 - 17:46:28 von pram »
Roland Praml

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

Offline Legolas

  • Senior Mitglied
  • ****
  • Beiträge: 446
  • Geschlecht: Männlich
Re: MIME Mail manipulieren
« Antwort #4 am: 23.11.10 - 08:49:06 »
Moin Roland,

erst mal danke für die Rückmeldung!

zu1)
Manchmal sieht man den Wald vor lauter Bäumen nicht! Mich hat die "falsche" Fehlermeldung so irritiert, dass ich gar nicht auf die Idee kam den Funktionsnamen zu prüfen!
Es hätte ja auch einfach die Fehlermeldung: Unbekannter Funktionsaufruf als Fehlermeldung kommen können! Aber... wer versteht schon immer Notes. ;-)

zu 2 und 2b)
Beim Einlesen des zuvor exportierten Streams in eine Datei erhalte ich beim Import folgende Fehlermeldung: "Characterset is not recognized (4547) in Zeile: XX"
Ich habe den Mime-Inhalt mit dem Befehl:
If (Not stream2.Open(sTempFileName, "ISO-8859-1")) Then.... exportiert.
Im Anschluss importiere ich den Text wieder mit dem Befehl:
Call mime.SetContentFromText(Stream2, "text/html;charset=charset=UTF-8'", ENC_NONE)
und erhalte die obige Fehlermeldung.
Importiere ich jedoch mit dem Befehl:
Call mime.SetContentFromText (stream2, "text/html;charset=iso-8859-1", ENC_NONE)
funktioniert es.  Nur dann habe ich nicht den gewünschten charset!

zu 2c) Funktioniert so! Danke

zu 3) Mit UTF8 wäre mir schon geholfen!   Mal schauen wie ich's hin bekomme.


Gruß
Bernd
Arbeite klug, nicht hart.

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: MIME Mail manipulieren
« Antwort #5 am: 23.11.10 - 17:55:09 »
Hallo Bernd,
da sind wieder Bäume  ;) schau mal GENAU was du schreibst:
Call mime.SetContentFromText(Stream2, "text/html;charset=charset=UTF-8'", ENC_NONE)
es muss heißen: text/html; charset=UTF-8, leerstelle nach ";" beachten (Groß/Kleinschreibung von utf-8/UTF-8 sollte egal sein)

Gruß
Roland
Roland Praml

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

Offline Legolas

  • Senior Mitglied
  • ****
  • Beiträge: 446
  • Geschlecht: Männlich
Re: MIME Mail manipulieren
« Antwort #6 am: 24.11.10 - 08:51:24 »
Hallo Roland,

ich versinke gleich im Boden!!!
Das mit dem Befehl war ein Tippfehler im Posting. Im Quellcode stimmte es.
Call mime.SetContentFromText(Stream2, "text/html;charset=charset=UTF-8'", ENC_NONE)

Das Problem lag wohl am Parameter "ENC_QUOTED_PRINTABLE".
Call mime.SetContentFromText(Stream2, "text/html;charset=UTF-8'", ENC_QUOTED_PRINTABLE)
Mit diesem Parameter funktioniert der Import (Warum auch immer?).

Nach dem Import mit diesem Befehl zeigt er mir zwar an, dass der charset UTF-8 verwendet wird. Allerdings sind sämtliche Umlaute "Ä, Ö, Ü, usw." nun fehlerhaft.
Z. Bsp.:
"Mit freundlichen Grüßen" sieht wie folgt aus:
"Mit freundlichen Gr??en"

Grüße
Bernd
Arbeite klug, nicht hart.

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: MIME Mail manipulieren
« Antwort #7 am: 24.11.10 - 11:10:12 »
Nein stimmt wieder nicht  ;D
Call mime.SetContentFromText(Stream2, "text/html;charset=charset=UTF-8'", ENC_NONE)
(Charset ist doppelt, Am Schluss ist noch ein ' der auch weg muss)
Ein
Code
Call mime.SetContentFromText(Stream2, "text/html; charset=UTF-8", ENC_NONE) 
funktioniert definitiv (bei mir)

Gruß
Roland
Roland Praml

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

Offline Legolas

  • Senior Mitglied
  • ****
  • Beiträge: 446
  • Geschlecht: Männlich
Re: MIME Mail manipulieren
« Antwort #8 am: 24.11.10 - 11:54:29 »
So,

Roland ich wünsche dir weiterhin eine schöne Zeit im Forum!
Ich gehe jetzt in den Garten und vergrabe mich!

Grüß und Danke für deine Mühe!

Bernd
Arbeite klug, nicht hart.

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: MIME Mail manipulieren
« Antwort #9 am: 24.11.10 - 13:00:14 »
funktionierts denn jetzt wie gewünscht?

Gruß
Roland
Roland Praml

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

Offline Legolas

  • Senior Mitglied
  • ****
  • Beiträge: 446
  • Geschlecht: Männlich
Re: MIME Mail manipulieren
« Antwort #10 am: 24.11.10 - 13:52:36 »
Hallo Roland,

hier unten ist es sooo dunkel! ;-)

Soweit tut es das, was ich wollte!

Grüße
Bernd
Arbeite klug, nicht hart.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz