AtNotes Übersicht Willkommen Gast. Bitte einloggen oder registrieren.
19.10.21 - 00:28:59
Übersicht Hilfe Regeln Glossar Suche Einloggen Registrieren
News:
Schnellsuche:
+  Das Notes Forum
|-+  Domino 9 und frühere Versionen
| |-+  ND8: Entwicklung (Moderatoren: Axel, Thomas Schulte, koehlerbv)
| | |-+  Mime-Feld kopiern
« vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: Mime-Feld kopiern  (Gelesen 4983 mal)
Legolas
Senior Mitglied
****
Offline Offline

Geschlecht: Männlich
Beiträge: 422



« am: 26.11.10 - 14:53:15 »

Hallo Forum,

und noch eine Frage zum Thema MIME Mails.

Ich versuche aktuell, ein Dokument mit einem MIME/HTML Feld in ein neues
Dokument zu kopieren.

Lieder gehen beim "normalen" Kopieren die Mime-Attribute verloren. Es sieht dann wieder
aus wie ein normales Richtextfeld aus.

Hier der Codauszug:

   s.ConvertMIME = False
   Set maildoc = db.CreateDocument

   maildoc.form = "Memo"
   maildoc.sendto =  empfaenger
   maildoc.subject = mailsubject

   Set item = sourceDoc.Getfirstitem("AbsenderBody")
   Call item.Copyitemtodocument(maildoc, "Body")
   Call maildoc.Send(False)
   s.ConvertMIME = True


Nun meine Fragen hierzu:
1) Ist das überhaupt möglich, einfach ein Mime-Feld in ein anderes Dokument zu kopieren so dass die Mime-Formatierung erhalten bleibt?
2) Oder muss ich den Weg gehen, dass ich aus Dokument 1 den MIME-Inhalt komplett auslese und dann in das Body Feld des Zieldokuments einfüge?

Gibt es hier ein best practice Weg?
Wie verhält sich das Ganze bei Multipart MIME-Mails?


Grüße
Bernd

Gespeichert

Arbeite klug, nicht hart.
pram
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 1169



WWW
« Antworten #1 am: 27.11.10 - 08:40:25 »

Hi Bernd,

Du willst es echt wissen  Grin
Wenn du das Feld nicht umbenennen musst, gehts noch relativ einfach. Da hilft dir ein CopyAllItems um ein temp-Doc zu erzeugen. Anschließend iterierst du über doc.items und löscht alle Felder bis auf das Mime-Feld und $FILE

Ansonsten musst du Mime-Part für Mime-Part kopieren. Ich hab dafür auch ein Codeschnipsel.

Ich habe aber hier eine Bitte. Untenstehender Code hat Kollegen und mich viel Arbeit gekostet und wir müssen immer wieder mal fest stellen, dass sich noch der ein oder andere Fehler eingeschlichen hat. (z.B. bei der Filterung, welche Mime-Header wir kopieren und welche nicht)
Solltest du Verbesserungen im Code machen, oder noch eine andere Möglichkeit finden wie man diese widerspenstigen Mime-Items kopiert, so wäre ich dir sehr dankbar wenn du diese im Foum wieder mitteilst.

Gruß
Roland

Code:
'/**
' * Kopiert den Inhalt einer Mime-Entity und alle untergeordneten Entitäten in eine Ziel-Entität
' * @param srcMime Mime-Quellobjekt
' * @param dstMime Mime-Zielobjekt
' * @return
' */
Private Function copyMimeWithChildren(srcMime As NotesMIMEEntity, dstMime As NotesMIMEEntity)
On Error GoTo rethrow
If False Then
rethrow: rethrow
End If
'--- Errorhandling Ende -----
Dim session As New NotesSession
Dim dstHdr As NotesMIMEHeader
Dim stream As NotesStream
Set stream =  session.createStream
' also wenn mir irgenwder mal zeigen kann wie man diese $%&§§$" Mime-items einfacher kopieren kann
' dann wäre ich darüber SEHR dankbar
Dim filter(0), contentType$
filter(0)="Content-Type"
contentType = Trim(StrRight(srcMime.GetSomeHeaders(filter, True), "Content-Type:"))
' header kopieren
ForAll header In srcMime.HeaderObjects
'Msgbox header.HeaderName + ": " + header.GetHeaderValAndParams()
If header.HeaderName = "Content-Transfer-Encoding" Then
' nop
ElseIf header.HeaderName = "Content-Type" Then
' nop
ElseIf header.HeaderName Like "X-*" Then
' nop
' ElseIf header.HeaderName = "Content-ID" Then
' ' nop

Else
' If srcMime.GetParentEntity Is Nothing Then
' ' CHECKME: hier noch eine Skip-Methode einbauen bei Root-Mimes oder reicht X-*
' End If

Dim hdr As NotesMIMEHeader
Set hdr = dstMime.CreateHeader(header.HeaderName)
' MsgBox header.HeaderName + " = "+ header.GetHeaderValAndParams()
If Not hdr Is Nothing Then Call hdr.SetHeaderValAndParams( header.GetHeaderValAndParams() )
End If
End ForAll
' content kopieren
Call srcMime.getContentAsBytes( stream, False )
Call dstMime.setContentFromBytes( stream, contentType, srcMime.encoding )

Dim dstChild As NotesMIMEEntity
Dim srcChild As NotesMIMEEntity
Set srcChild =  srcMime.GetFirstChildEntity

Do Until srcChild Is Nothing
Set dstChild = dstMime.createChildEntity()
Call copyMimeWithChildren( srcChild, dstChild )
Set srcChild = srcChild.GetNextSibling
Loop

End Function


Aufgerufen wird das dann so:
set src = srcDoc.getMimeEntity("AbsenderBody")
set dst = dstDoc.createMimeEntity("Body")
call copyMimeWithChildren(src,dst)
Call srcDoc.CloseMIMEEntities(False,"AbsenderBody")
Call dstDoc.CloseMIMEEntities(True,"Body")
Gespeichert

Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework
Legolas
Senior Mitglied
****
Offline Offline

Geschlecht: Männlich
Beiträge: 422



« Antworten #2 am: 29.11.10 - 10:47:50 »

Danke Roland,

das werde ich tun!

Grüße
Bernd
Gespeichert

Arbeite klug, nicht hart.
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006, Simple Machines Prüfe XHTML 1.0 Prüfe CSS
Impressum Atnotes.de - Powered by Syslords Solutions - Datenschutz | Partner: