如何使用 MIME 添加和删除附件

Posted

技术标签:

【中文标题】如何使用 MIME 添加和删除附件【英文标题】:How to Add and Remove attachments using MIME 【发布时间】:2019-04-24 23:07:59 【问题描述】:

我正在尝试删除以前使用 MIME 添加的附件。 这是我的代码

try
    var d = database.getView("Main").getFirstDocument()
    var it = d.getFirstItem("Body")
    var att:NotesEmbeddedObject = it.getEmbeddedObject("mydoc.docx")
    var streamDOC:NotesStream = session.createStream()

    streamDOC.setContents(att.getInputStream())


    var newd;
    newd = database.getView("NewD").getFirstDocument()
    if(newd==null)
        newd = database.createDocument()
        newd.replaceItemValue("Form","Main")
        var me = newd.createMIMEEntity("Body")
    else
        var me = newd.getMIMEEntity("Body") 
    

    var filename = "test.pdf"
    var mc = me.createChildEntity();
    var he = mc.createHeader("Content-Disposition")
    he.setHeaderVal("attachment; filename=\"" + filename + "\"");
    he = mc.createHeader("Content-ID");
    he.setHeaderVal( "<" + filename + ">" );
    mc.setContentFromBytes(streamDOC, "application/vnd.openxmlformats-officedocument.wordprocessingml.document", NotesMIMEEntity.ENC_IDENTITY_8BIT);
    newd.save()
    print("success")
catch(e)
    print("fail " + e)

这是我用来删除附件的代码

<xp:repeat id="repeat1" rows="30"
        value="#javascript:@AttachmentNames()" var="att"
    >
        <xp:text tagName="p" escape="true" id="computedField1"
            value="#javascript:att"
        >
        </xp:text>
        <xp:link escape="true" text="Delete" id="link2">
            <xp:eventHandler event="onclick" submit="true"
                refreshMode="complete"
            >
                <xp:this.action><![CDATA[#javascript:try
    var it:NotesRichTextItem = nd.getDocument().getFirstItem("Body")
    var eo:NotesEmbeddedObject = it.getEmbeddedObject(att)
    if(eo==null)
        print("No attachment found")
    else
        print("att ok")
        eo.remove()
        nd.save()

    

        print("success delete " + e)
catch(e)
    print("fail delete " + e)
]]></xp:this.action>
            </xp:eventHandler></xp:link>
    </xp:repeat>

在 ytria 中,我的文档如下所示

当我尝试使用链接删除附件时,我收到以下错误

2018-11-22 10:27:48 HTTP JVM:删除失败在“lotus.domino.local.Item”类型的对象上调用方法“getEmbeddedObject(string)”时出错 [静态 Java 接口包装器,lotus.domino。 local.Item: lotus.domino.Item]'

这就是我的网页的样子

这可能是什么原因

谢谢

托马斯

另请参阅此问题 How to Remove MIME attachments correctly

【问题讨论】:

【参考方案1】:

getFirstItem 返回一个 NotesItem,而不是 NotesRichTextItem。我不确定 SSJS :NotesRichTextItem 将结果转换为 NotesRichTextItem。在 Java 中它将是 RichTextItem it = (RichTextItem) nd.getDocument().getFirstItem("Body");。在= 之后添加(RichTextItem) 会使API 将结果转换为该类。也许这在 SSJS 中也是需要的。

【讨论】:

只有当项目已经是复合数据时,Java 中的强制转换才会起作用,但它不在这里。我认为文档数据源使用的DominoDocument 类有一些专门的方法可以以中立的方式操作附件。 我改用 var eo = nd.getDocument().getAttachment(att) 解决了。但现在我遇到了另一个问题。当所有附件都被删除时,所有 $File 项目都已被删除,但 Body 项目仍在文档中。所以当我添加一个新附件时,我会恢复所有附件 我添加了一个关于这个***.com/questions/53431447/…的新问题

以上是关于如何使用 MIME 添加和删除附件的主要内容,如果未能解决你的问题,请参考以下文章

您将使用啥架构来存储 100 亿条 MIME 消息并使其可删除和全文搜索,包括。附件

如何在 C# 中编码二进制 MIME 附件?

python MIME:如何更改附件的名称?

如何在 Java 中创建 MIME 附件文本/xml?

直接从 MIME 字符串将附件添加到 MailMessage

如何将 msg 中的附件附加到 Mime 以在 Python 中作为电子邮件发送?