Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Lotus Notes-邮件文档-获取附件名称(和导出附件)_Java_Email_Lotus Notes_Lotus Domino_Email Attachments - Fatal编程技术网

Java Lotus Notes-邮件文档-获取附件名称(和导出附件)

Java Lotus Notes-邮件文档-获取附件名称(和导出附件),java,email,lotus-notes,lotus-domino,email-attachments,Java,Email,Lotus Notes,Lotus Domino,Email Attachments,我的一个lotus notes邮件文档中有三个附件 Desert.jpg、Hydrageas.jpg和Tulips.jpg 我有下面的代码段 Vector<Item> itemList = lotusNotesDocument.getItems(); for (Item item : itemList) { if (item.getType() == Item.ATTACHMENT) {

我的一个lotus notes邮件文档中有三个附件

Desert.jpg、Hydrageas.jpg和Tulips.jpg

我有下面的代码段

        Vector<Item> itemList = lotusNotesDocument.getItems();

        for (Item item : itemList)
        {
            if (item.getType() == Item.ATTACHMENT)
            {
                System.out.println("*****111********* ATTACHMENT=" + item.getName() + "=" + item.getValueString());
            }
            else if (item.getType() == Item.EMBEDDEDOBJECT)
            {
                System.out.println("*****222********* EMBEDDEDOBJECT=" + item.getName() + "=" + item.getValueString());
            }
            else if (item.getType() == Item.MIME_PART)
            {
                System.out.println("*****333********* MIME_PART=" + item.getName() + "=" + item.getValueString());
            }               
        }
这是dominoapi中的一个bug吗?以前有其他人遇到过这个吗

我的确切要求是将附件保存到磁盘


PS:我正在使用Lotus Expediter 6.2.3.20110921-0940这确实是一种bug,但它太古老了,以至于“这只是Notes的行为”。如果您有多个名称相同的项目,则始终会得到第一个项目

但是,通常NotesDocument中的附件嵌入到富文本项中,因此可以循环rt项并获取附件。如果是这种情况,此代码应执行以下操作:

    ForAll i In doc.Items
      If i.Type = RICHTEXT Then
        Print "rt item:", i.Name
        If Not IsEmpty(i.EmbeddedObjects) Then
            If ( i.Type = RICHTEXT ) Then
                ForAll o In i.EmbeddedObjects
                    If ( o.Type = EMBED_ATTACHMENT ) Then
                        If dir(sPath & o.Name)<>"" Then Kill sPath & o.Name
                        Print sPath & o.Name
                        Call o.ExtractFile(sPath & o.Name)  
                    End If
                End ForAll
            End If
        End If
      End If
    End ForAll

在所有情况下都有一个限制-如果您有几个相同的命名附件,那么您只能使用一次“正确”的名称,其他所有附件都将使用内部生成的名称。我不知道还有什么更好的解决方案,可以通过C API来获取这些信息。

我已经找到了答案

我好像有一个

lotusNotesDocument.convertToMIME();
在我前面提出的代码块之前执行的语句

如果我去掉这个,输出如下

*****333********* MIME_PART=Body=
*****333********* MIME_PART=Body=
*****111********* ATTACHMENT=$FILE=Hydrangeas.jpg
*****111********* ATTACHMENT=$FILE=Hydrangeas.jpg
*****111********* ATTACHMENT=$FILE=Hydrangeas.jpg
*****333********* MIME_PART=Body=
*****333********* MIME_PART=Body=
**1***111********* ATTACHMENT=$FILE=Desert.jpg
**1***111********* ATTACHMENT=$FILE=Hydrangeas.jpg
**1***111********* ATTACHMENT=$FILE=Tulips.jpg
我使用lotusNotesDocument.convertToMIME()将notes邮件导出到磁盘。因此,我将把这两条语句移到附件导出部分下面


通过下面的另一篇帖子找到了答案

问题是在输出中我只能看到一个附件'hydangeas.jpg'(写了三次)。我期待着所有三个附件名称沙漠.jpg,Hydrageas.jpg和郁金香.jpg
lotusNotesDocument.convertToMIME();
**1***111********* ATTACHMENT=$FILE=Desert.jpg
**1***111********* ATTACHMENT=$FILE=Hydrangeas.jpg
**1***111********* ATTACHMENT=$FILE=Tulips.jpg