我想自动化Outlook,这样我可以下载电子邮件的“件件”,这样我可以配合相关的消息一起。 据我所知,电子邮件通常有一个“邮件ID”来达到这个目的,从而使电子邮件可以的角度来看待,作为一个新闻阅读器“线程”是绑在一起的。
展望是否有它发送“邮件ID”的电邮中的概念? 我看到的是,可以(使用自动化)中提取的元素是主题,SENDEREMAIL,创建时间,身体,发送者姓名,和HTMLBody。 是一个“消息ID”或等效可用的地方,太?
我想自动化Outlook,这样我可以下载电子邮件的“件件”,这样我可以配合相关的消息一起。 据我所知,电子邮件通常有一个“邮件ID”来达到这个目的,从而使电子邮件可以的角度来看待,作为一个新闻阅读器“线程”是绑在一起的。
展望是否有它发送“邮件ID”的电邮中的概念? 我看到的是,可以(使用自动化)中提取的元素是主题,SENDEREMAIL,创建时间,身体,发送者姓名,和HTMLBody。 是一个“消息ID”或等效可用的地方,太?
展望通过对话跟踪相关的消息。
在Outlook 2003中,有ConversationTopic
(MAPI: PR_CONVERSATION_TOPIC
) ConversationIndex
(MAPI: PR_CONVERSATION_INDEX
)。 ConversationTopic
通常邮件主题( 减去前缀- RE:/ FW:等 ),而ConversationIndex
表示的顺序排序ConversationTopic
( 基本上GUID +时间戳 )。 请参阅MSDN上的对话工作 。 ConversationIndex
在MSDN上明确定义在这里 。
在Outlook 2010,它们加入ConversationID
(MAPI: PR_CONVERSATION_ID
),其从所导出的ConversationTopic
。 ConversationID
可以从生成ConversationTopic
如这里讨论 。
有关关于对话看到MSG协议规格更为详细的信息[MS-OXOMSG]:E-Mail对象协议规范 ,部分2.2.1.2和2.2.1.3。
小除了以前的伟大答案。 在情况下,如果其他人也需要的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属性和投结果相应的托管类型