Autor Thema: MimeEntity (Java)  (Gelesen 5286 mal)

Sebastianh

  • Gast
MimeEntity (Java)
« am: 12.12.08 - 11:23:14 »
Hallo,

lange hab ich hier passiv mitgelesen, und ich habe schon viel Nutzen aus den bisherigen Beiträgen gezogen (zunächst mal Danke dafür),  jetzt wurde es aber mal Zeit, dass ich mich anmelde und aktiv teilnehme :)

Ich versuche aktuell, den Body einer Email komplett zu ersetzen, mit einem Link auf eine Webanwendung. Dazu versuche ich folgendes:
Code
MIMEEntity mime = tmpDok.createMIMEEntity();
MIMEEntity child = mime.createChildEntity();
Stream stream = s.createStream();
MIMEHeader header = mime.createHeader("Content-Type");
header.setHeaderVal("mulitpart/mixed");
header.setHeaderVal("automatic generated Subject");
stream.writeText(sb.toString());
child.setContentFromText(stream, "text/html;charset=UTF-8", MIMEEntity.ENC_NONE);
mime.encodeContent(MIMEEntity.ENC_NONE);
tmpDok.closeMIMEEntities(true, "Body");
stream.close();

an der Stelle tmpDok.createMIMEEntity(); bekomme ich folgende Exception:

NotesException: Out of memory

Speicher ist allerdings mehr als genug vorhanden, und zu besagtem Zeitpunkt sind kaum Objekte angelegt. Auch über die Sache mit dem recyclen bin ich bereits informiert, allerdings brauche ich die paar Objekte die zu diesem Zeitpunkt existieren alle noch für den weiteren Programmverlauf. Irgendjemand eine Idee?

Gruß,
Sebastian

Sebastianh

  • Gast
Re: MimeEntity (Java)
« Antwort #1 am: 12.12.08 - 11:41:18 »
Interessanterweise funktioniert:

Code
MIMEHeader childHeader = child.createHeader("Content-Type");

macht das irgendwie Sinn?

edit: "funktioniert" in dem Sinne, dass das Objekt, und auch das Memo angelegt werden, der Text in dem Memo is nun auch unterstrichen dargestellt, allerdings nicht klickbar.
« Letzte Änderung: 12.12.08 - 11:51:38 von Sebastianh »

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: MimeEntity (Java)
« Antwort #2 am: 02.01.09 - 22:26:33 »
Ich kann dir ein paar Tipps geben wie es in Lotus-Script funktioniert:

1. man muss "Session.ConvertMime = false" setzen
2. das Setzen eines "Content-Type" Headers scheint nicht immer richtig zu funktinieren
3. Zum Schluss unbedingt closeMimeEntity aufrufen (vergisst man dies, stürzt gerne der client ab)
4. wenn alles getan ist, sollte man ConvertMime wieder auf den ursprünglichen Wert wiederherstellen


ich hab mal ein paar Codeschnipsel auf das Wesentliche zusammenkopiert. Hier erzeuge ich mein root-mime folgendermaßen:

Code
convertStatus = session.ConvertMime
session.ConvertMime = false

' ... Wurzelknoten anlegen
Set  rootMime 	= doc.CreateMIMEEntity(itemName)
Set  stream 	=  session.CreateStream()
Call stream.WriteText("This is a multipart message in MIME format.")	
Call rootMime.SetContentFromText(stream, "multipart/related", ENC_NONE )

' ... Knoten mit Bodytext
Set  contentMime	=  rootMime.CreateChildEntity()
stream.Position = 0
Call contentMime.SetContentFromText(stream, "multipart/alternative", ENC_NONE )
' ... einmal als Plaintext
Set  textMime		=  contentMime.CreateChildEntity()
Set  stream 		=  session.CreateStream()
Call stream.WriteText("plaintextMessage")	
Call textMime.SetContentFromText(stream, "text/plain", ENC_IDENTITY_8BIT )
Call stream.Close

' .... und einmal als HTML
Set  htmlMime		=  contentMime.CreateChildEntity()
Set  stream 		=  session.CreateStream()
Call htmlMime.SetContentFromText(stream, {text/html; charset="utf-8"}, ENC_NONE)
Call htmlMime.EncodeContent(ENC_QUOTED_PRINTABLE)

' .... Anhang bzw. Bilder erstellen(optional)

Set mimePart 	=  rootMime.CreateChildEntity()
Set mimeData   =  session.CreateStream()
Call mimeData.WriteText(base64content)
Call mimePart.SetContentFromText(mimeData, "image/" +imagetype, ENC_BASE64)
Call mimePart.CreateHeader("Content-ID").SetheaderVal("<bild1@mydomain>")		
' ... über <img src="cid:bild1@mydomain"> kann dieses Bild ggf in die Mail eingebettet werden

Call doc.CloseMIMEEntities(True, itemName)
' ab jetzt darf nicht mehr auf diese Mimeparts zugegriffen werden

' ganz zum Schluss (am Besten nach dem Speichern)
session.ConvertMime = convertStatus


Die Mail (bzw. das mime-item) hat dann folgenden Aufbau
Code
+ multipart/related
   + multipart/alternative (es wird der letzte Part, sowit unterstützt, angezeigt)
       + text/plain
       + text/html
   + image/gif (optional)

Vielleicht kannst du obigen Code auf Java adaptieren...

p.S. Passt man beim Umgang mit MimeEntities nicht auf, bekommt man u.U. Dokumente, welche man nicht mehr öffnen/löschen oder sonstwas kann. Wenn hier wer eine Lösung hat, wie man diese Dokumente wieder los wird, wäre ich sehr daran interessiert :-)
« Letzte Änderung: 02.01.09 - 22:28:54 von pram »
Roland Praml

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

Sebastianh

  • Gast
Re: MimeEntity (Java)
« Antwort #3 am: 07.01.09 - 11:18:22 »
Danke, aber via:

Code
lotus.domino.MIMEEntity mime = tmpDok.createMIMEEntity();
lotus.domino.MIMEEntity child = mime.createChildEntity();
lotus.domino.Stream stream = s.createStream();
MIMEHeader header = child.createHeader("Content-Type");
header.setHeaderVal("text/html");
stream.writeText(sb.toString());
child.setContentFromText(stream, "text/html;charset=UTF-8", lotus.domino.MIMEEntity.ENC_NONE);
mime.encodeContent(lotus.domino.MIMEEntity.ENC_NONE);
tmpDok.closeMIMEEntities(true);
stream.close();

habe ich das Problem bereits erfolgreich gelöst

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz