C# VSTO邮件发送事件

C# VSTO邮件发送事件,c#,outlook,vsto,C#,Outlook,Vsto,我对VSTO有一个小问题。我需要得到发送的邮件,并坚持它的内容。是否有一种关于邮件发送的事件 目前我找到的唯一解决方案是在SentItems文件夹上连接ItemAdd事件 Outlook.Folder sentItems = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail) as Outlook.Folder; sentItems.Items.ItemAdd += ne

我对VSTO有一个小问题。我需要得到发送的邮件,并坚持它的内容。是否有一种关于邮件发送的事件

目前我找到的唯一解决方案是在SentItems文件夹上连接ItemAdd事件

Outlook.Folder sentItems =
     Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail)
    as Outlook.Folder;
sentItems.Items.ItemAdd += new ItemsEvents_ItemAddEventHandler(SentItemFolder_ItemAdd);

private void SentItemFolder_ItemAdd(object addedItem)
{
    Outlook.MailItem newItem = (Outlook.MailItem)addedItem;

    MessageBox.Show(newItem.EntryID);
}

这真的是唯一的方法吗?或者你们中的任何人都知道更优雅的解决方案吗?

您可以使用
ItemSend
事件来实现这一点,如下所示:

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
    this.Application.ItemSend += new Microsoft.Office.Interop.Outlook.ApplicationEvents_11_ItemSendEventHandler(Application_ItemSend);
}


private void Application_ItemSend(object Item, ref bool Cancel)
{
    // Code to run when item is being sent
}

是,但项目尚未发送。我在问关于ItemSent事件的事。如果您检查作为参数获取的项目,则该项目尚未发送,所有关于发送时间和类似信息尚未准备就绪。发送成功也不令人难过。@MaiOM我不知道任何发送事件。我在博客文章中看到,你并不是唯一一个使用SentItems.ItemAdd来捕捉这一点的人,但实际上我认为ItemSend是一个更好的选择。ItemSend事件在发送电子邮件时发生,因此“发送时间”为“现在”。即使邮件从未送达,邮件也将添加到“已发送邮件”中(尝试将邮件发送给不存在的收件人)。此外,用户还可以关闭将发送的邮件保存在该文件夹中的功能,方法是转到工具->选项->电子邮件选项。因此,当用户界面中的邮件(例如电子邮件/会议请求)发送到发件箱中排队时。。。?“那怎么办?”我不明白你在问什么。也许你应该把这作为一个单独的问题发布在forum@GTG假设Outlook客户端由于某种原因处于脱机状态。当我们发送电子邮件或会议请求时,它会在发件箱中排队,直到客户机重新联机……此时是否有或是否有一些事件可以连接?