C# 如何在Outlook插件中排除原始邮件

C# 如何在Outlook插件中排除原始邮件,c#,outlook,vsto,office-interop,C#,Outlook,Vsto,Office Interop,我正在用C#编写一个Outlook 2010/2013插件。我的简略代码如下所示: using Outlook = Microsoft.Office.Interop.Outlook; using Office = Microsoft.Office.Core; public partial class ThisAddIn { private void ThisAddIn_Startup(object sender, System.EventArgs e) {

我正在用C#编写一个Outlook 2010/2013插件。我的简略代码如下所示:

using Outlook = Microsoft.Office.Interop.Outlook;
using Office = Microsoft.Office.Core;
public partial class ThisAddIn
{
    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {            
        Application.ItemSend += Application_ItemSend;
    }

    void Application_ItemSend(object Item, ref bool Cancel)
    {
        Outlook.MailItem mailItem = Item as Outlook.MailItem;
        // Scan for keywords before the user sends the email.
    }
}

当用户点击电子邮件上的发送按钮时,将执行应用程序\u ItemSend事件处理程序。在这一点上,我想扫描邮件正文中的某些关键字。但是,我想在该扫描中排除旧邮件/原始邮件。我只想扫描用户刚刚键入的消息
mailItem.Body
mailItem.HTMLBody
不仅包含用户正在发送的消息,还包括整个线程/对话中以前的所有消息。我怎样才能过滤掉这些呢?

我自己还没有测试过,但这也在我们插件的待办事项列表中。我还没有找到太多关于这方面的文档,但是邮件的OOXML(以及HTML)——至少在2013年——包含如下内容:

OOXML:

<w:bookmarkStart w:id="0" w:name="_MailOriginal"/>

谢谢-我得出了一个有点类似的结论-我本来打算把信息分成灰色的细横线,但是这个书签看起来更聪明一些。关于需要在不同版本的Outlook中测试确切行为的优点。。。如果电子邮件是纯文本模式,因此没有HTML,也可以尝试其他方式。我想我可能会选择“From:”或是那样的话。是的。。这也是可能的。请注意,From字符串与语言有关。例如,在德国的展望中,它将是“Von:”。尽管如此,如果你喜欢走这条路,我不久前也做了一些工作,它支持英语和德语(见顶部)以及HTML/纯文本邮件。它是用Java编写的,但是regex方法的注释中有regex。我无法在Outlook 2016或2019中实现这一点。原始书签不显示在书签集合或WordOpenXML属性中。你们中有人在这些Outlook版本中解决了这个问题吗?
<span style='mso-bookmark:_MailOriginal'>
Word.Document document = mailItem.GetInspector.WordEditor;
string xml = document.WordOpenXML;