Office 2010 Outlook插件不只保存附件
本文关键字:保存 2010 Outlook 插件 Office | 更新日期: 2023-09-27 18:10:38
我继承了一个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事件之外的邮件项目执行此操作可能遵循相同的步骤。