展望是否嵌入在电子邮件中元素的一个邮件ID或等同?(Does Outlook embed a Mes

2019-06-26 20:28发布

我想自动化Outlook,这样我可以下载电子邮件的“件件”,这样我可以配合相关的消息一起。 据我所知,电子邮件通常有一个“邮件ID”来达到这个目的,从而使电子邮件可以的角度来看待,作为一个新闻阅读器“线程”是绑在一起的。

展望是否有它发送“邮件ID”的电邮中的概念? 我看到的是,可以(使用自动化)中提取的元素是主题,SENDEREMAIL,创建时间,身体,发送者姓名,和HTMLBody。 是一个“消息ID”或等效可用的地方,太?

Answer 1:

展望通过对话跟踪相关的消息。

在Outlook 2003中,有ConversationTopic (MAPI: PR_CONVERSATION_TOPICConversationIndex (MAPI: PR_CONVERSATION_INDEX )。 ConversationTopic通常邮件主题( 减去前缀- RE:/ FW:等 ),而ConversationIndex表示的顺序排序ConversationTopic基本上GUID +时间戳 )。 请参阅MSDN上的对话工作 。 ConversationIndex在MSDN上明确定义在这里 。

在Outlook 2010,它们加入ConversationID (MAPI: PR_CONVERSATION_ID ),其从所导出的ConversationTopicConversationID可以从生成ConversationTopic如这里讨论 。

有关关于对话看到MSG协议规格更为详细的信息[MS-OXOMSG]:E-Mail对象协议规范 ,部分2.2.1.2和2.2.1.3。



Answer 2:

小除了以前的伟大答案。 在情况下,如果其他人也需要的C#实现算法用于从ConversationIndex / ConversationTopic检索的conversationId:

private const int c_ulConvIndexIDOffset = 6;
private const int c_ulConvIndexIDLength = 16;

private string GetConversationId()
        {
            var convTracking = GetMapiPropertyBool(PR_CONVERSATION_INDEX_TRACKING);
            var convIndex = GetMapiPropertyBytes(PR_CONVERSATION_INDEX);
            byte[] idBytes;
            if (convTracking
                && convIndex != null
                && convIndex.Length > 0)
            {
                // get Id from Conversation index
                idBytes = new byte[c_ulConvIndexIDLength];
                Array.Copy(convIndex, c_ulConvIndexIDOffset, idBytes, 0, c_ulConvIndexIDLength);
            }
            else
            {
                // get Id from Conversation topic
                var topic = GetMapiPropertyString(PR_CONVERSATION_TOPIC);
                if (string.IsNullOrEmpty(topic))
                {
                    return string.Empty;
                }

                if (topic.Length >= 265)
                {
                    topic = topic.Substring(0, 256);
                }
                topic = topic.ToUpper();

                using (var md5 = new System.Security.Cryptography.MD5CryptoServiceProvider())
                {
                    idBytes = md5.ComputeHash(Encoding.Unicode.GetBytes(topic));
                }
            }

            return BitConverter.ToString(idBytes).Replace("-", string.Empty);
        }

GetMapiProperty ...()是一个辅助功能,这只是检索所需的MAPI属性和投结果相应的托管类型



文章来源: Does Outlook embed a MessageID or equivalent in its email elements?