【问题标题】:How to exclude original messages in Outlook plugin如何在 Outlook 插件中排除原始邮件
【发布时间】:2014-09-22 17:56:23
【问题描述】:

我正在用 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.
    }
}

当用户点击电子邮件上的发送按钮时,Application_ItemSend 事件处理程序将执行。那时,我想扫描邮件正文中的某些关键字。但是,我想在该扫描中排除旧的/原始消息。我只想扫描用户刚刚输入的消息...mailItem.Body 和mailItem.HTMLBody 不仅包含用户正在发送的消息,而且还包括整个线程/对话中的所有先前消息。如何过滤掉这些?

【问题讨论】:

    标签: c# outlook vsto office-interop


    【解决方案1】:

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

    OOXML:

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

    HTML:

    <span style='mso-bookmark:_MailOriginal'>
    

    这个书签应该可以让您找到可以切断消息的点 - 据我所知,API 中没有其他选项。

    如何获取邮件的OOXML请看这里:

    Word.Document document = mailItem.GetInspector.WordEditor;
    string xml = document.WordOpenXML;
    

    【讨论】:

    • 谢谢 - 我得出了一个有点相似的结论 - 我打算在细的灰色水平线上拆分消息,但这个书签看起来更聪明一些。关于需要在不同版本的 Outlook 中测试确切行为的好点......如果电子邮件处于纯文本模式并且因此其中没有 HTML,还可以尝试不同的方法。我想我可能会在“发件人:”或这种情况下分裂。
    • 是的.. 这也是可能的。请注意,From-String 取决于语言。因此,例如在德语 Outlook 中,它将是“Von:”。尽管如此,如果你喜欢走这条路,我前段时间也做了一些工作,它支持英语和德语(见顶部)和 HTML/纯文本邮件。它在 Java 中,但在正则表达式方法的 cmets 中有正则表达式。 pastebin.com/FiBiuxv4
    • 我无法让它在 Outlook 2016 或 2019 中工作。_MailOriginal 书签不会显示在 BookMarks 集合或 WordOpenXML 属性中。你们有谁设法在这些 Outlook 版本中解决了这个问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多