转发或回复邮件时获取 parent 邮件项目以阅读 headers

Get parent mail item to read headers when message is forwarded or replied to

我想阅读邮件项目 headers 以查找回复或转发邮件时的特定值。如果在 header 中找到该值,我们将采取一些措施。下面的代码将捕获 Forward 事件,但它不会给我包含所有典型 header 数据的 parent 消息。相反,它会根据没有 header 数据的 parent 捕获一条新消息。这是有道理的,因为它尚未发送。

我也尝试对 Application.ItemSend 事件做同样的事情,在用户单击发送按钮时进行陷阱。不幸的是,我仍然不知道如何访问 parent 消息。

我的问题是,当用户点击回复或转发按钮时,我们是否需要使用另一个事件或另一个过程来捕获 parent 或更好的方法来完全解决这个问题?

在此先感谢您的帮助!

private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            _activeExplorer = Application.Explorers[1];
            _activeExplorer.SelectionChange += _activeExplorer_SelectionChange;
        }

private void _activeExplorer_SelectionChange()
        {
            Selection selection = Application.ActiveExplorer().Selection;
            if (selection != null && selection.Count == 1 && selection[1] is MailItem)
            {
               MailItem selectedMail = selection[1] as MailItem;
               ((Outlook.ItemEvents_10_Event)selectedMail).Forward += mailItem_Forward;
            }
        }

private void mailItem_Forward(object Forward, ref bool Cancel)
        {
            if (Forward != null)
            {
                if (Forward is Outlook.MailItem)
                {
                    Outlook.MailItem mailItem = Forward as Outlook.MailItem;
                    mailItem.Save();
                    String EmailHeader = mailItem.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x007D001E");
    
                    // The string is always null because this is a new message , need to access the parent of the forward...how? 
                    if (EmailHeader.Contains("X-Key-Classification") == true)
                    {
                        Debug.WriteLine(EmailHeader);
                    }
                }

            }
        }

但是 MailItem.Forward 事件在特定项目上触发,因此您确实知道父消息是什么。如果您对多个项目使用相同的回调,您可以为 MailItem 对象创建一个包装器,该对象存储在 属性 中,事件处理程序将成为该包装器对象上的一个方法 - 这样您就可以知道哪个项目引发了事件。