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:
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
Interessanterweise funktioniert:
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.
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:
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
+ 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 :-)
Danke, aber via:
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