如何跟踪邮件通信

时间:2015-04-17 20:12:31

标签: vba outlook

有人知道是否可以查看我的收件箱中的电子邮件是否是我之前发送的邮件的回复?

示例:我向A人发送电子邮件并提问。当A回应时,我想将原始邮件与他的回复联系起来。我的目标是将整个邮件对应保存在自定义文件夹中。

我尝试将MailItem.UserProperty添加到电子邮件对象中,但显然它没有发送。

我想到的另一种解决方案是在邮件正文中添加一个不可见的文本,我可以在收到回复时搜索(假设我的原始邮件将包含在响应中)。

1 个答案:

答案 0 :(得分:1)

MailItem类提供以下跟踪对话的属性:

  • ConversationID - 唯一标识MailItem对象所属的Conversation对象的字符串。
  • ConversationTopic - 表示Outlook项目的会话线程主题的字符串。它是消息的规范化主题,没有前缀字符串的主题。
  • ConversationIndex - 一个字符串,指示对话线程中项目的相对位置。

您可能会看到会话分组取决于主题行。

您可以使用MailItem类的GetConversation方法获取表示此项目所属对话的Conversation对象。请注意,如果项目没有对话,则GetConversation将返回Null(在Visual Basic中为Nothing)。在以下情况下,项目不存在对话:

  • 项目尚未保存。可以通过编程,用户操作或自动保存来保存项目。
  • 对于可以发送的项目(例如,邮件项目,约会项目或联系项目),该项目尚未发送。
  • 已通过Windows注册表禁用了对话。
  • 商店不支持“对话”视图(例如,Outlook在Microsoft Exchange Server 2010之前的Microsoft Exchange版本的经典在线模式下运行)。使用Store对象的IsConversationEnabled属性确定存储是否支持“对话”视图。

例如:

 public void DemoConversation()
 { 
   object selectedItem = Application.ActiveExplorer().Selection[1]; 
   // This example uses only 
   // MailItem. Other item types such as 
   // MeetingItem and PostItem can participate 
   // in the conversation. 
   if (selectedItem is Outlook.MailItem) 
   { 
      // Cast selectedItem to MailItem. 
      Outlook.MailItem mailItem = selectedItem as Outlook.MailItem; 
      // Determine the store of the mail item. 
      Outlook.Folder folder = mailItem.Parent as Outlook.Folder; 
      Outlook.Store store = folder.Store; 
      if (store.IsConversationEnabled == true) 
      { 
          // Obtain a Conversation object. 
          Outlook.Conversation conv = mailItem.GetConversation(); 
          // Check for null Conversation. 
          if (conv != null) 
          { 
             // Obtain Table that contains rows 
             // for each item in the conversation. 
             Outlook.Table table = conv.GetTable(); 
             Debug.WriteLine("Conversation Items Count: " + table.GetRowCount().ToString()); 
             Debug.WriteLine("Conversation Items from Table:"); 
             while (!table.EndOfTable) 
             { 
                Outlook.Row nextRow = table.GetNextRow(); 
                Debug.WriteLine(nextRow["Subject"] + " Modified: " + nextRow["LastModificationTime"]); 
             } 
             Debug.WriteLine("Conversation Items from Root:"); 
             // Obtain root items and enumerate the conversation. 
             Outlook.SimpleItems simpleItems = conv.GetRootItems(); 
             foreach (object item in simpleItems) 
             { 
                // In this example, enumerate only MailItem type. 
                // Other types such as PostItem or MeetingItem 
                // can appear in the conversation. 
                if (item is Outlook.MailItem) 
                { 
                   Outlook.MailItem mail = item as Outlook.MailItem; 
                   Outlook.Folder inFolder = mail.Parent as Outlook.Folder; 
                   string msg = mail.Subject + " in folder " + inFolder.Name; 
                   Debug.WriteLine(msg); 
                } 
                // Call EnumerateConversation 
                // to access child nodes of root items. 
                EnumerateConversation(item, conv); 
             } 
          } 
       } 
    } 
 } 


 void EnumerateConversation(object item, Outlook.Conversation conversation) 
 { 
     Outlook.SimpleItems items = conversation.GetChildren(item); 
     if (items.Count > 0) 
     { 
        foreach (object myItem in items) 
        { 
           // In this example, enumerate only MailItem type. 
           // Other types such as PostItem or MeetingItem 
           // can appear in the conversation. 
           if (myItem is Outlook.MailItem) 
           { 
              Outlook.MailItem mailItem = myItem as Outlook.MailItem; 
              Outlook.Folder inFolder = mailItem.Parent as Outlook.Folder; 
              string msg = mailItem.Subject + " in folder " + inFolder.Name; 
              Debug.WriteLine(msg); 
           } 
           // Continue recursion. 
           EnumerateConversation(myItem, conversation); 
        } 
     } 
  }