我有一个带有两个功能区的Outlook加载项(用于读取邮件和撰写邮件)。
我创建了一个事件,以便在发送后发送到已发送的项目时收到电子邮件。
这是我的ThisAddIn.cs
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
OutlookApplication = Application as Outlook.Application;
OutlookInspectors = OutlookApplication.Inspectors;
OutlookInspectors.NewInspector +=
new Outlook.InspectorsEvents_NewInspectorEventHandler(OutlookInspectors_NewInspector);
var sentBoxItems =
this.Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail).Items;
sentBoxItems.ItemAdd +=
new Outlook.ItemsEvents_ItemAddEventHandler(Items_ItemsAdd);
}
private void Items_ItemsAdd(object Item)
{
if (Item != null)
Helpers.SaveMailSent((Outlook.MailItem)Item); // Here do stuff to save mail
}
我试图在"发送"单击按钮,但mailItem变为null。
现在我正在尝试发送新邮件并将其发送到已发送的文件夹。
问题是每次发送邮件时都不会触发事件(有时会执行,但有时不会执行)
答案 0 :(得分:1)
首先,您需要保持源对象的活动,即防止它被破坏或释放。要实现这一点,您必须在类级别声明源对象:
private Outlook.Items sentBoxItems = null;
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
OutlookApplication = Application as Outlook.Application;
OutlookInspectors = OutlookApplication.Inspectors;
sentBoxItems =
this.Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail).Items;
sentBoxItems.ItemAdd +=
new Outlook.ItemsEvents_ItemAddEventHandler(Items_ItemsAdd);
}
private void Items_ItemsAdd(object Item)
{
if (Item != null)
Helpers.SaveMailSent((Outlook.MailItem)Item); // Here do stuff to save mail
}
还要注意以下事实:
ItemAdd
事件。这是OOM中一个众所周知的问题。