2016-10-20 47 views
0

我需要創建一個OutLook加載項來捕獲帶有大附件的電子郵件,並用可用於下載附件的URL替換附件。PropertyAccessor.GetProperty(PR_ATTACH_DATA_BIN)對於Outlook附件失敗

我發現this它展示瞭如何發送它看起來像一個很好的起點,但問題是,調用之前修改附件:

常量字符串PR_ATTACH_DATA_BIN = 「http://schemas.microsoft.com/mapi/proptag/0x37010102」;

var attachmentData = attachment.PropertyAccessor.GetProperty( PR_ATTACH_DATA_BIN);

失敗並顯示屬性未知或無法找到的錯誤。

我可以調用attachment.PropertyAccessor.GetProperty()來獲取附件類型爲1(ATTACH_BY_VALUE),所以我應該能夠attachment.PropertyAccessor.GetProperty獲得的數據(PR_ATTACH_DATA_BIN)

我想知道如果這裏存在特權問題。我在這裏看到:dev.office.com/docs/add-ins/outlook/understanding-outlook-add-in-permissions有Outlook加載項權限,如果我沒有ReadWriteItem訪問權限,那麼這可能會失敗。我不知道如何或在哪裏設置。他們提到了它在清單中的位置,但我沒有看到我能夠做到的地方。

我使用Visual Studio 2015年社區

回答

0

Outlook對象模型使用PropertyAccessor.GetProperty無法檢索大型二進制或字符串MAPI屬性。在低級別(僅適用於擴展MAPI,C++或Delphi),IMAPIProp::GetProps()確實適用於大型PT_STING8/PT_UNICODE/PT_BINARY屬性。它們必須被打開,IStream的(IMAPIProp::OpenProperty(PR_ATTACH_DATA_BIN, IIS_IStream, ...))。如果使用Redemption是一個選項,其附着對象公開AsTextAsArrayAsStream等特性。

set Session = CreateObject("Redemption.RDOSession") 
    Session.MAPIOBJECT = Application.Session.MAPIOBJECT 
    set item = Session.GetMessageFromID(Application.ActiveExplorer.Selection(1).EntryID) 
    for each attach in item.Attachments 
    MsgBox attach.AsText 
    next 
+0

謝謝你的答案,但在這一點上我覺得我的問題是更基本的。在我的測試中,附件是一個小文本文件,所以我認爲我應該可以得到它PropertyAccessor.GetProperty()儘管最終我將需要使用其他的東西,因爲大小的限制 如果我起訴附件。 SaveAsFile()我也收到一個異常,告訴我我沒有適當的權限來執行此操作。 MSVS和C#不是m y原生開發環境,所以我懷疑我缺少一些非常基本的東西。 –

+0

Attachment.Type屬性的值是什麼?使用OutlookSpy(http://www.dimastr.com/outspy/)查看消息?選擇消息,單擊IMessage按鈕,轉至GetAttachmentTable選項卡,雙擊附件條目。你看到PR_ATTACH_DATA_BIN屬性了嗎? –

+0

PR_ATTACH_TYPE = 7並且存在PR_ATTACH_DATA_BIN屬性。 –