Office 2010 Outlook插件不只保存附件



我继承了一个office 2010 Outlook插件。它应该能够将邮件,附件或两者保存在单独的数据库/文件中。它可以很好地保存邮件和附件(也就是两者都保存)。如果我选择只保存附件,它仍然会同时保存(邮件+附件),这是一个包含附件的漂亮的msg文件(msg是outlook邮件文件格式)。还有一个Office 2003/2007版本可以正确地做到这一点,要么保存邮件,要么保存附件,要么根据选择同时保存。我已经对代码进行了几天的审查,我还没能找到2003/7所能做到的和2010所不能做到的区别。

从代码的角度来看,Outlook 2010可能无法分别保存邮件和附件吗?

细节:
Office 2003插件:c#, .NET3.5, VS8编写Office 2007插件:c#, .NET3.5, VS8
Office 2010插件:c#, . net, VS10

我们已经正式退役2003版本,不再维护它。当有人报告任何问题时,2007正在进行bug修复。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年已弃用

我以前在使用Outlook的时候也做过类似的事情。我将概述我的步骤:

订阅新邮件事件:

Application.NewMailEx += Application_NewMailEx;

处理程序使用逗号分隔的字符串为您提供所有新邮件的列表。我拆分并处理了每个id:

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

processMail函数检索邮件项并迭代提供所有附件(如果有附件):

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> );
我的add in中的函数做了更多的工作(例如创建目录结构),但基本思想应该是显而易见的。对mail new事件之外的邮件项目执行此操作可能遵循相同的步骤。

最新更新