我正在使用ApplicationEvents_11_ItemSendEventHandler
(请参阅http://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.applicationevents_11_itemsendeventhandler.aspx)在从Outlook发送项目时进行一些处理。
然而,由于此事件触发“发送”而不是“已发送”,我无法获取某些信息,例如发件人,发送时间等。
在项目实际发送后是否会触发的替代事件?我读过这篇博文; http://easyvsto.wordpress.com/2010/07/27/how-to-save-mail-content-when-a-mail-is-sent-from-outlook/但考虑到用户可以禁用此功能,我对依赖于已发送项目文件夹中的项目持谨慎态度。
编辑:我应该补充一点,我实际上已经尝试了“观看已发送的项目文件夹”的方法,并注意到ItemAdd
事件似乎只针对我发送的第一封电子邮件触发,然后不会再重新启动Outlook。我的代码如下;
var sentMail = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail);
sentMail.Items.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(Items_ItemAdd);
我的方法......
void Items_ItemAdd(object item)
{
MessageBox.Show(((Outlook.MailItem)item).Subject);
}
答案 0 :(得分:5)
如果您使用模态对话框( WPF / Winforms MessageBox
),您将只获得第一个事件触发器。您必须实施非阻止事件处理程序(可能是项目排队策略)。
不要使用阻止UI调用模式对话框 - Outlook会注意到UI被阻止,并忽略触发后续中断。
请参阅this form post for reference。
如果您担心控制已发送邮件存储的用户首选项,请使用以下代码段覆盖它们...
MailItem.DeleteAfterSubmit = false; // force storage to sent items folder (ignore user options)
Outlook.Folder sentFolder = ThisAddIn.Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail);
if (sentFolder != null)
MailItem.SaveSentMessageFolder = sentFolder; // override the default sent items location
MailItem.Save();