Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: magic_halli am 19.02.09 - 11:20:35

Titel: NotesMIMEEntity und text/plain auslesen
Beitrag von: magic_halli 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.
Titel: Re: NotesMIMEEntity und text/plain auslesen
Beitrag von: magic_halli 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.
Titel: Re: NotesMIMEEntity und text/plain auslesen
Beitrag von: m3 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
Titel: Re: NotesMIMEEntity und text/plain auslesen
Beitrag von: magic_halli 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.
Titel: Re: NotesMIMEEntity und text/plain auslesen
Beitrag von: m3 am 19.02.09 - 12:29:50
Guckst Du:
http://atnotes.de/index.php/topic,44252.0.html
http://atnotes.de/index.php/topic,44184.0.html
Titel: Re: NotesMIMEEntity und text/plain auslesen
Beitrag von: m3 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
Titel: Re: NotesMIMEEntity und text/plain auslesen
Beitrag von: pram 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
Titel: Re: NotesMIMEEntity und text/plain auslesen
Beitrag von: m3 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
...
Titel: Re: NotesMIMEEntity und text/plain auslesen
Beitrag von: magic_halli 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.
Titel: Re: NotesMIMEEntity und text/plain auslesen
Beitrag von: pram 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
Titel: Re: NotesMIMEEntity und text/plain auslesen
Beitrag von: magic_halli 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.