2

Outlook 将已读回执存储为ReportItem对象。

是否可以获得ID属于给定已读回执的原始消息的一个或一些细节?我查看了对象的属性,ReportItem但我迷路了。

由于已读回执有不同的形式,我不想以编程方式处理回执的正文 - 相反,如果可能的话,我希望从 Outlook 中获取它。

注意:该解决方案至少应适用于 Outlook 2003 到新版本。

4

3 回答 3

3

看起来ReportItem和源之间的唯一链接MailItemConversationIndexConversationTopic。这是 Outlook 用来将已读回执消息与相关源链接在一起的方法MailItem。您只需按过滤,ConversationTopic然后使用 的前 44 个字符ConversationIndex来识别原始来源MailItem

示例对话索引

来源索引01CDC1C35624E2A7BD18CF8C439CA73B62A052922657
收据索引01CDC1C35624E2A7BD18CF8C439CA73B62A0529226570000012862

您可以使用Items.Restrict将项目减少到特定的 DASL 过滤器

DASL 搜索:

[ConversationTopic] = 'read receipt ConversationTopic here'

定位 ReportItem 的父 MailItem

Outlook.MailItem source = FindReadReceiptSourceMessage(ri);
string entryID = source.EntryID;
// ...
public static Outlook.MailItem FindReadReceiptSourceMessage(Outlook.ReportItem readReceipt) 
{
    Outlook.Folder inbox = Globals.ThisAddIn.Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox) as Outlook.Folder;
    string sourceIndex = readReceipt.ConversationIndex.Substring(0, 44);
    string topicFilter = string.Format("[ConversationTopic] = '{0}'", readReceipt.ConversationTopic);
    Outlook.Items topicItems = inbox.Items.Restrict(topicFilter);
    return topicItems.OfType<Outlook.MailItem>().Where(c=>c.ConversationIndex.Equals(sourceIndex)).FirstOrDefault();
}
于 2012-11-13T19:35:28.377 回答
0

您的意思是:“您只需按 ConversationTopic 过滤,然后使用 ConversationIndex 的前 44 个字符来识别原始源 MailItem。”

但我认为我们只过滤 ConversationIndex 的前 44 个字符。因为如果有 2 封电子邮件具有相同的 ConversationTopic,那么我们不需要使用 ConversationTopic 进行过滤。

于 2014-12-18T09:02:31.230 回答
0

在您的项目“myitem”上使用兑换库。在我看来比上面的好

    If vs_sender = "" Then 'read receipts
            Set objSMail = CreateObject("Redemption.SafeMailItem")
            objSMail.item = myitem
            vs_sender = objSMail.SenderEmailAddress
            vs_recipient = myitem.Recipients(1).Address
            Set objSMail = Nothing
    End If
于 2015-05-15T03:23:51.510 回答