Autor Thema: NotesMIMEEntity und text/plain auslesen  (Gelesen 3938 mal)

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
NotesMIMEEntity und text/plain auslesen
« am: 19.02.09 - 11:20:35 »
Hi,

ich sitze grad an einem Problem in Bezug auf text/plain von MIME-Mails auszulesen, also den eigentlichen Mailtext. Irgendwie komme ich hier nicht recht weiter!  :(

Es ist doch so, dass der Aufbau vom MIME-Item 'body' normalerweise so aussieht (lt. Recherche):
Code
+ multipart/related
   + multipart/alternative
      + text/plain
      + text/html
   + image/gif
   + image/jpeg

Das ist aber nicht immer so, oder? Ich habe hier ne Mail, deren MIME-Item 'body' so aussieht:
Code
+ multipart/related
   + multipart/alternative
      + multipart/related
         + text/plain
         + text/html
   + image/gif
   + image/jpeg
Jetzt frag ich mich, wie ich allgemeingültig den text/plain auslesen kann, wenn dieser nun doch offensichtlich in verschiedenen Ebenen vorkommen kann?! Oder ist diese Mail nur ein "Ausreiser" - warum auch immer?

Bisher lese ich text/plain so aus:
Code
     Set mime = doc.GetMIMEEntity
	
	If Not(mime Is Nothing) Then
		
		If mime.ContentType = "multipart" Then
			Set child = mime.GetFirstChildEntity
				
			' Child´s durchgehen
			While Not(child Is Nothing)

				If child.ContentType = "multipart" Then
					Messagebox "Hier text/plain auslesen:"
					Set ch = child.GetFirstChildEntity
					If ch.ContentType = "text" And ch.ContentSubType = "plain" Then
						Messagebox "ContentAsText vom Mail-body :  " & ch.ContentAsText
					End If
					Set ch = ch.GetNextSibling
				End If
				
		     Set child = child.GetNextSibling
			Wend

		End If
		
	End If

Wenn jemand sowas schonmal gemacht hat, oder weiß wie´s geht... wie liest man denn bitteschön den text/plain einer Mail korrekt aus?
Mein Code sollte doch so erstmal richtig sein?

Danke und Gruß

Rico.
Lotus Notes 8.0.2

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
Re: NotesMIMEEntity und text/plain auslesen
« Antwort #1 am: 19.02.09 - 11:46:21 »
Haaaa...  ;D

Ich bin durch Zufall auf einen 3-Zeiler in der Hilfe gestoßen, der all meine Sorgen löst, denn nun wird korrekt der Mailtext ausgelesen - egal wo text/plain in der MIME-Struktur steht!!!
Code
Set mime = doc.GetMIMEEntity
	If Not(mime Is Nothing) Then
		' multipart:
		If mime.ContentType = "multipart" Then
			Set child = mime.GetFirstChildEntity
			
			' -----aus DominoHilfe:-----
			While Not(child Is Nothing)
				Set mime = child
				Set child = mime.GetFirstChildEntity
			Wend
               ' ---------------------------
			If mime.ContentType = "text" And mime.ContentSubType = "plain" Then
				body = mime.ContentAsText
				Messagebox "MIME-Body :  " & body
			End If
			
		End If
		
	End If
Geil, die Ausgabe ist nun korrekt! Fast...  ;)

Ich muss nun nur noch die Formatierung des 'mime.ContentAsText' anpassen.
Sprich: Bspw. wird ein 'ü' als '=FC', ein 'ß' als '=DF' usw. zurückgeliefert!

Mh, nach welchen Stichwörtern muss ich schauen, um die Formatierung korrekt anzupassen???

Rico.
Lotus Notes 8.0.2

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: NotesMIMEEntity und text/plain auslesen
« Antwort #2 am: 19.02.09 - 11:52:33 »
Seufz. Das nennt sich Base64 - Forumssuche sollte Dir weiterhelfen.

Was machst Du, wenn es mehrere text/plain Teile in der Mail gibt?

http://www.ietf.org/rfc/rfc2045.txt
http://www.ietf.org/rfc/rfc2046.txt
http://www.faqs.org/rfcs/rfc2822.html
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
Re: NotesMIMEEntity und text/plain auslesen
« Antwort #3 am: 19.02.09 - 12:24:41 »
Zitat
Was machst Du, wenn es mehrere text/plain Teile in der Mail gibt?
Omg, ist das so? Mh, dann... ???

Ich hab bisher jedoch noch keine einzige Mail hier gesehen, wo das so ist... läuft dann wohl unter dem Stichwort "Glück gehabt"?!  ;)


Ich werd jetzt erstmal die Base64-Sache angehen, um damit wenigstens grundsätzlich meine Mailgeschichte abgedeckt zu haben...

Rico.
Lotus Notes 8.0.2

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: NotesMIMEEntity und text/plain auslesen
« Antwort #5 am: 19.02.09 - 12:36:22 »
Und leider kommt bei HTML-Mails auch nicht immer eine Text-Version mit.
Ein paar Testfälle dazu gibts beispielsweise unter
http://people.dsv.su.se/~jpalme/ietf/mhtml-test/mhtml.html
http://www.imc.org/mimetest/
http://www-eng-x.llnl.gov/documents/tests/email.html
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: NotesMIMEEntity und text/plain auslesen
« Antwort #6 am: 19.02.09 - 12:46:05 »
Geil, die Ausgabe ist nun korrekt! Fast...  ;)

Ich muss nun nur noch die Formatierung des 'mime.ContentAsText' anpassen.
Sprich: Bspw. wird ein 'ü' als '=FC', ein 'ß' als '=DF' usw. zurückgeliefert!

Mh, nach welchen Stichwörtern muss ich schauen, um die Formatierung korrekt anzupassen???
Das deutet auf Encoding = QUOTED_PRINTABLE hin. Du musst bevor du ContentAsText ausliest decode (oder wars encode)
aufrufen

Evtl liest dir auch mal die RFC zu den MIME-Zeug durch, was zu tun ist, wenn mehrere Plains vorkommen (was aber normalerweise nicht der Fall ist)

Gruß
Roland
Roland Praml

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

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: NotesMIMEEntity und text/plain auslesen
« Antwort #7 am: 19.02.09 - 12:49:35 »
Sorry, ich hab mich vertan. Das ist nicht Base64 sondern "quoted printable".
Was es in jeder Mail ist, musst Du den Headern jeweils entnehmen.

Code
Content-Transfer-Encoding: quoted-printable
oder
Code
Content-Transfer-Encoding: base64
oder
...
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
Re: NotesMIMEEntity und text/plain auslesen
« Antwort #8 am: 19.02.09 - 13:45:09 »
Mh... ich habe jetzt mal folgendes probiert:
Code
If mime.ContentType = "text" And mime.ContentSubType = "plain" Then
   Call mime.DecodeContent()
   body = mime.ContentAsText
   Messagebox "MIME-Body :  " & body
End If
Jetzt sind die diversen Zeichen (ö, ä, ß usw.) richtig dargestellt.
Hierbei habe ich keinerlei Unterscheidung/Abfrage gemacht, was in der Mail bei 'Content-Transfer-Encoding: ' steht.

Soll´s das denn wirklich schon gewesen sein? Scheint mir zu simpel, aber lt. DesignerHilfe wars das schon.

EDIT: So, alles scheint jetzt nach ausführlichen Tests mit zig verschiedenen Mails in diversen Formatierungen erstmal so zu klappen, wie ich´s mir vorgestellt habe.
Danke für die Hilfe/Tips/Anregungen!

Rico.
« Letzte Änderung: 19.02.09 - 14:21:07 von magic_halli »
Lotus Notes 8.0.2

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: NotesMIMEEntity und text/plain auslesen
« Antwort #9 am: 19.02.09 - 21:40:53 »
Jetzt sind die diversen Zeichen (ö, ä, ß usw.) richtig dargestellt.
Hierbei habe ich keinerlei Unterscheidung/Abfrage gemacht, was in der Mail bei 'Content-Transfer-Encoding: ' steht.

Soll´s das denn wirklich schon gewesen sein? Scheint mir zu simpel, aber lt. DesignerHilfe wars das schon.
Ja das wars eigentlich. Das Mime wertet den Encodingtype selber aus.
Man kann so ein Mimeentity übrigens auch dafür zweckentfremden um Base64-Daten nach Binär und wieder zurück zu wandeln  ;D
Wichtig im Umgang mit Mime's ist noch dass du am Schluss "closeMimeEntity" auf.

Gruß
Roland
Roland Praml

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

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
Re: NotesMIMEEntity und text/plain auslesen
« Antwort #10 am: 20.02.09 - 07:51:52 »
Zitat
Wichtig im Umgang mit Mime's ist noch dass du am Schluss "closeMimeEntity" auf.
Achso?! In der Hilfe ist das garnicht erwähnt in den Beispielen!
Wo muss dass denn hin bzw. auf was wende ich diese Methode an?

EDIT: Das gehört ans Dokument, direkt nachdem ich mit der MIME-Verarbeitung fertig bin?! Also so: 'doc.closeMIMEEntities'

Rico.
« Letzte Änderung: 20.02.09 - 09:36:38 von magic_halli »
Lotus Notes 8.0.2

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz