Outlook中“已发送邮件”上的事件

时间:2012-09-20 15:12:22

标签: c# outlook vsto ms-office outlook-addin

我正在使用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);
}

1 个答案:

答案 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();