2011-10-06 103 views
0

我繼承了Outlook的Office 2010插件。它應該能夠將郵件,附件或兩者保存在單獨的數據庫/文件中。它可以很好地保存郵件(包括附件)(也稱爲兩者)。如果我只選擇保存附件,它仍然可以保存(郵件+附件),即 - 包含附件的好消息文件(msg是Outlook郵件文件格式)。 還有一個Office 2003/2007版本可以正確地做到這一點,既可以保存郵件,附件或兩者都選擇。我已經審查了幾天的代碼,但我一直無法找到2003/7能力與2010不具備的能力之間的差異。Office 2010 Outlook插件僅保存附件

難道說Outlook 2010無法從代碼角度單獨保存郵件和附件嗎?

詳情:
的Office 2003插件:用C#編寫,.NET3.5,VS8
Office 2007的插件:C#,.NET3.5,VS8
Office 2010的插件:C#,.NET4,VS10

我們已經正式退役了2003版,並且不再保留這一點。當有人報告任何東西時,2007年正在被弄糊塗。 2010年是「新」的黑色;)

我可能已經找到了一個關鍵點

protected override void EnableAddAttachmentsToLegis() 
{ 
    // Adds a button on the right click context menu, 
    // when user clicks on an attachment: 
    _application.AttachmentContextMenuDisplay 
     += new Outlook.ApplicationEvents_11_AttachmentContextMenuDisplayEventHandler 
     (Application_AttachmentContextMenuDisplay); 
} 

http://technet.microsoft.com/en-us/query/bb623145 - 無賴,好問題是現在 - 什麼取代它,或者它被完全取消。

其中已取代2007 - http://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.applicationevents_11_event_members.aspx - 這過時的2010年

回答

0

我有我使用Outlook時做了這樣的時代以前。我將概述我的步驟:

訂閱到新的郵件事件:

Application.NewMailEx += Application_NewMailEx; 

處理程序提供了使用逗號分隔字符串的所有新郵件的列表。我分裂和處理每一標識的:

string[] entryIds = EntryIDCollection.Split (new char[] { ',' }); 
foreach (string entryId in entryIds) { 
    processMail (entryId, maskExpanded); 
} 

的processMail函數檢索的MailItem和迭代奧弗所有附件是否有附件:

private void processMail(string entryId) { 
    Outlook.MailItem mail = Application.Session.GetItemFromID (entryId) as Outlook.MailItem; 
    if (mail.Attachments.Count > 0) { 
     foreach (Outlook.Attachment att in mail.Attachments) 
      processAttachment (att); 
    } 
} 

的processAttachment功能的核心只是保存使用

附件
attachment.SaveAsFile (<filename>); 

我加入的函數做的更多一些(例如創建一個目錄結構),但基本思想應該已經變得很明顯。對郵件新事件之外的郵件進行此操作可能會遵循相同的步驟。

+0

有趣的是,當我更新這個頁面時,我實際上寫了一些相同的東西。我的不同之處在於,我不會在所有新郵件上執行此操作,只是用戶點擊它們(右鍵單擊)。您確認2010年可以從編程的角度分離郵件中的附件。 – DoStuffZ