LotusScript:组合两个 NotesMIMEEntity 对象

LotusScript: Combine two NotesMIMEEntity objects

我编写了一些代码来使用 MIME 对象创建和发送新邮件。行得通,没问题。

现在我需要添加现有文档的正文。 Body 字段也在 MIME 中。将此 NotesMIMEEntity 对象添加到邮件的正确方法是什么?我可以组合两个 NotesMIMEntity 对象吗?我可以将一个对象附加到另一个对象吗?

感谢您的帮助!

更新

这是我试过的。对象项包含来自其他文档的 MIMEEntity。对象主体是正在构建的新 MIMEEntity。代码的结果是zip,nada...

Set bodyChild= body.createChildEntity()
Set stream= session.Createstream()
Call item.Getcontentasbytes(stream)
Call bodyChild.Setcontentfrombytes(stream, {text/html;charset="iso-8859-1"}, ENC_NONE)
Call stream.Close()

这是将文本、图像和一些 headers 复制到目标 MIME 实体的代码。我希望其他人也可以使用它。谢谢大家!

Sub CopyMultipartMime (mimeFrom As NotesMIMEEntity, mimeTo As NotesMIMEEntity) 
    '** recursively get all the parts of a multi-part MIME entity
    Dim childFrom As NotesMIMEEntity
    Dim childTo As NotesMIMEEntity
    Dim stream As NotesStream
    Dim mimeHeader As NotesMIMEHeader
    Dim childHeader As NotesMIMEHeader

    On Error GoTo catch

    count=count+1           
    If count>1000 Then Exit Sub ' failsafe

    Set stream= session.Createstream()      
        Call mimeFrom.getContentAsBytes(stream)
        Call mimeTo.setContentFromBytes(stream, mimeFrom.Contenttype + "/" + mimeFrom.Contentsubtype, mimeFrom.Encoding)
    Call stream.Close()
    Set childFrom = mimeFrom.GetFirstChildEntity
    Do Until childFrom Is Nothing
        Set childTo= mimeTo.createChildEntity()
        Set mimeHeader= childFrom.GetNthHeader("Content-Disposition")
        If Not mimeHeader Is Nothing Then
            Call childTo.createHeader(mimeHeader.HeaderName).Setheaderval(mimeHeader.GetHeaderVal())
        End If
        Set mimeHeader= childFrom.GetNthHeader("Content-ID")
        If Not mimeHeader Is Nothing Then
            Call childTo.createHeader(mimeHeader.HeaderName).Setheaderval(mimeHeader.GetHeaderVal())
        End If
        Call CopyMultipartMime(childFrom, childTo) 
        Set childFrom = childFrom.GetNextSibling
    Loop    
    Exit Sub
catch:
    Error Err, Error$ & ", " & GetThreadInfo(1) & " line " & Erl        
End Sub

我只想对 D.Bugger 解决方案发表评论,该解决方案非常好并且没有问题。

我想补充一点,如果某些 child 实体是文件附件,则需要使用以下语法:

Call childTo.createHeader( mimeHeader.HeaderName ).Setheadervalandparams( mimeHeader.Getheadervalandparams() )

因为"the params"在“Content-Type”和“Content-Disposition”headers包含有意义的信息,即文件附件文件名。

此外,您还应该在从 child 获得的内容中至少添加另一个 header,即“Content-Type” .

否则文件附件 child 实体被复制,但它们将缺少文件名和类型,因此将无用。

完整更正的 Do 循环在这里:

Do Until childFrom Is Nothing
    Set childTo= mimeTo.createChildEntity()

    Set mimeHeader= childFrom.GetNthHeader("Content-Type")

    If Not mimeHeader Is Nothing Then
        Call childTo.createHeader( mimeHeader.HeaderName ).Setheadervalandparams( mimeHeader.Getheadervalandparams() )
    End If

    Set mimeHeader= childFrom.GetNthHeader("Content-Disposition")

    If Not mimeHeader Is Nothing Then
        Call childTo.createHeader( mimeHeader.HeaderName ).Setheadervalandparams( mimeHeader.Getheadervalandparams() )
    End If

    Set mimeHeader= childFrom.GetNthHeader("Content-ID")

    If Not mimeHeader Is Nothing Then
        Call childTo.createHeader( mimeHeader.HeaderName ).Setheaderval( mimeHeader.Getheaderval() )
    End If

    Call CopyMultipartMime(childFrom, childTo)

    Set childFrom = childFrom.GetNextSibling
Loop

除此之外,感谢您的回答,对不起,如果我发布了一个答案,但显然我无法评论您的答案。