Outlook.ItemsEvents 添加到已发邮件时获取mailItem
Outlook.ItemsEvents Get mailItem when adds to the sent mails
我有一个带有两个功能区的 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
}
我试图在单击 "Send" 按钮时获取事件,但 mailItem 变为空。
现在我正在尝试获取新邮件何时发送并进入已发送文件夹。
问题是每次发送邮件时都不会触发事件(有时会执行,但有时不会)
首先,你需要保持源对象存活,即防止它被破坏或释放。要实现它,您必须在 class 级别声明源对象:
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
}
还要注意以下事实:
- MailItem class 的 DeleteAfterSubmit 属性 允许设置一个布尔值,如果邮件消息的副本在发送时未保存,则为 True,否则为 False副本保存在“已发送邮件”文件夹中。因此,已发送的项目将永远不会添加到“已发送项目”文件夹中。
- 如果将多个项目添加到文件夹(通常超过 16 个),则不会触发
ItemAdd
事件。这是OOM中的一个众所周知的问题。
我有一个带有两个功能区的 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
}
我试图在单击 "Send" 按钮时获取事件,但 mailItem 变为空。
现在我正在尝试获取新邮件何时发送并进入已发送文件夹。
问题是每次发送邮件时都不会触发事件(有时会执行,但有时不会)
首先,你需要保持源对象存活,即防止它被破坏或释放。要实现它,您必须在 class 级别声明源对象:
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
}
还要注意以下事实:
- MailItem class 的 DeleteAfterSubmit 属性 允许设置一个布尔值,如果邮件消息的副本在发送时未保存,则为 True,否则为 False副本保存在“已发送邮件”文件夹中。因此,已发送的项目将永远不会添加到“已发送项目”文件夹中。
- 如果将多个项目添加到文件夹(通常超过 16 个),则不会触发
ItemAdd
事件。这是OOM中的一个众所周知的问题。