簡體   English   中英

Lotus Notes-郵件文檔-獲取附件名稱(和導出附件)

[英]Lotus Notes - Mail Document - Get Attachment Names (and Export Attachments)

我的一個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());
            }               
        }

此代碼的輸出如下

*****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=

這是Domino API中的錯誤嗎? 有人遇到過嗎?

我的確切要求是將附件保存到磁盤。

PS:我正在使用Lotus Expediter 6.2.3.20110921-0940

這確實是一種錯誤,但是它是如此古老,以至於“這就是Notes的行為方式”。 如果您有多個同名物品,則始終會得到第一個。

但是,通常,NotesDocument中的附件都嵌入在RTF項目中,因此您可以遍歷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

對於它們不是富文本項(直接附加到文檔)的情況,我認為代碼應該類似:

    If Not IsEmpty(doc.Embeddedobjects) Then
        ForAll o1 In doc.Embeddedobjects
            If ( o1.Type = EMBED_ATTACHMENT ) Then
                'Set o = obj2
                If Dir(sPath & o1.Name)<>"" Then Kill sPath & o1.Name
                Print "doc>", sPath & o1.Name
                Call o1.ExtractFile(sPath & o1.Name)  
            End If
        End ForAll          
    End If

但是我只是測試了這段代碼,卻驚訝地發現它沒有拾取任何附件(甚至文檔中的OLE對象),我不知道是否有人對此發表評論-我很確定它在過去的日子里能正常工作嗎?

在進一步調查中,一種適用於項目和直接嵌入項目的解決方案是:

dim names, obj
names = Evaluate("@AttachmentNames", doc)
ForAll aname In names
    Set obj = doc.Getattachment(aname)
    Print "any>", sPath & obj.Name
    Call obj.ExtractFile(sPath & obj.Name) 
End ForAll

在所有情況下,都有一個限制-如果您有多個相同的命名附件,則只能使用一次“正確”名稱,所有其他名稱都將使用內部生成的名稱。 我不知道有比通過C API獲取此信息更好的解決方案。

我找到了答案。

我好像有一個

lotusNotesDocument.convertToMIME();

語句在我之前提出的代碼塊之前執行。

如果我刪除此輸出如下

**1***111********* ATTACHMENT=$FILE=Desert.jpg
**1***111********* ATTACHMENT=$FILE=Hydrangeas.jpg
**1***111********* ATTACHMENT=$FILE=Tulips.jpg

我具有lotusNotesDocument.convertToMIME()以便將便箋郵件導出到磁盤。 因此,我將這兩條語句移到附件導出部分下面。

通過以下鏈接的另一篇文章找到了答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM