2011-10-06 68 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