[英]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.