Hi Bernd,
Du willst es echt wissen

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
| |
| |
| |
| |
| |
| |
| Private Function copyMimeWithChildren(srcMime As NotesMIMEEntity, dstMime As NotesMIMEEntity) |
| On Error GoTo rethrow |
| If False Then |
| rethrow: rethrow |
| End If |
| |
| Dim session As New NotesSession |
| Dim dstHdr As NotesMIMEHeader |
| Dim stream As NotesStream |
| Set stream = session.createStream |
| |
| |
| Dim filter(0), contentType$ |
| filter(0)="Content-Type" |
| contentType = Trim(StrRight(srcMime.GetSomeHeaders(filter, True), "Content-Type:")) |
| |
| ForAll header In srcMime.HeaderObjects |
| |
| If header.HeaderName = "Content-Transfer-Encoding" Then |
| |
| ElseIf header.HeaderName = "Content-Type" Then |
| |
| ElseIf header.HeaderName Like "X-*" Then |
| |
| |
| |
| |
| Else |
| |
| |
| |
| |
| Dim hdr As NotesMIMEHeader |
| Set hdr = dstMime.CreateHeader(header.HeaderName) |
| |
| If Not hdr Is Nothing Then Call hdr.SetHeaderValAndParams( header.GetHeaderValAndParams() ) |
| End If |
| End ForAll |
| |
| 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")