LotusScript:组合两个NotesMIMEEntity对象

问题描述 投票:0回答:2

我编写了一些代码来使用MIME对象创建和发送新邮件。这有效,这里没问题。

现在我需要添加现有文档的Body。 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()
lotus-notes mime lotusscript
2个回答
2
投票

这是将文本,图像和一些标题复制到目标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

1
投票

我只想对D.Bugger解决方案发表评论,这很好,没有问题。

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

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

因为“Content-Type”和“Content-Disposition”标题中的“params”包含有意义的信息,即文件附件文件名。

此外,您应该至少添加另一个标题到您从孩子那里获得的标题,即“Content-Type”。

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

完整更正的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

除此之外,感谢您的回答,如果我发布了答案,我很抱歉,但显然我无法对您的评论发表评论。

© www.soinside.com 2019 - 2024. All rights reserved.