7

当从 Outlook 发送项目时,我正在使用ApplicationEvents_11_ItemSendEventHandler(请参阅http://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.applicationevents_11_itemsendeventhandler.aspx )进行一些处理。

但是,由于此事件在“发送”而不是“发送”时触发,因此我无法获取某些信息,例如发件人、发送时间等。

项目实际发送是否会触发替代事件?我读过这篇博文;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);
}
4

1 回答 1

6

如果您使用模式对话框 ( WPF/WinformsMessageBox ),您只会获得第一个事件触发器。您必须实现非阻塞事件处理程序可能是项排队策略)。

不要使用阻止 UI 调用模式对话框 - Outlook 会注意到 UI 被阻止并忽略触发后续中断。

请参阅此表格帖子以供参考


如果您担心控制已发送项目存储的用户偏好,只需使用以下代码段覆盖它们...

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(); 
于 2012-09-20T17:15:55.310 回答