在Outlook未完全加载时检查已发送的邮件

问题描述 投票:0回答:1

我现在在检查是否已发送电子邮件时遇到问题。到目前为止,我已经尝试了以下三种订阅此类事件的方法:

  • application.ItemSend += ApplicationOnItemSend;
  • application.Session.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderOutbox).Items.ItemAdd += ItemsOnItemAdd;
  • application.Session.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderSentMail).Items.ItemAdd += ItemsOnItemAdd2;

这三个选项在Outlook完全打开时都很好用,当您打开一个msg文件而Outlook不在后台打开时,会出现我的问题。在这些情况下,您所看到的只是“新邮件”窗口,当您从那里发送邮件时,这些事件均不会触发。即使选中了在网络连接时应尽快发送邮件的选项,邮件也被放入发件箱,而在Outlook的下一个完整启动时,发件箱中已放入一封邮件,但未完全发送。即使在我的同事计算机上,没有安装我的Outlook加载项和相同的选项集(应该是标准选项),也存在将邮件放入发件箱的相同问题。我还检查了尝试订阅这些事件的方式,并且我的事件处理程序都不包含任何阻止后台线程的代码(例如,当我将MessageBox.Show()用于调试目的时)。因此,没有任何明显的原因可以阻止我的任何代码停止发送邮件。我订阅这些事件的地步似乎也没有什么不同。通常我会在Addin启动时订阅,但是仅在打开msg文件时不会调用该方法。因此,我已将订阅移至功能区的加载事件。加载事件会打印我的调试消息,指示已调用该方法,但在按“发送”后,ItemSend / ItemAdd事件仍不会触发。这是否只是Outlook发生故障?还是还有一种方法可以检查从“新邮件”窗口发送的邮件?

c# email outlook vsto outlook-addin
1个回答
0
投票

首先,最后两个偶数处理程序将不起作用-引发事件的对象必须保持活动状态。在您的情况下,您要在隐式变量上设置事件处理程序,该隐式变量将在下一次运行时在下一次运行的垃圾回收器中释放。引发事件的Items集合必须保存在单独的gloab l(类级别)变量中。

第二,请勿触摸发件箱文件夹中的消息-这样做会中止提交。

© www.soinside.com 2019 - 2024. All rights reserved.