You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Outlook VSTO开发:从回复/转发草稿获取原邮件EntryID

在Outlook VSTO中获取回复/转发草稿对应的原邮件EntryID

方法一:通过Conversation对象追溯原邮件

回复或转发生成的草稿会和原邮件同属一个会话,可通过会话对象直接定位原邮件:

  • 调用草稿邮件的GetConversation()方法获取Outlook.Conversation对象
  • 调用Conversation.GetRootItems()获取会话的根邮件集合(即最初的原邮件)
  • 遍历集合取出对应的MailItem,即可获取其EntryID

示例代码(C#):

Outlook.MailItem replyDraft = // 你的回复/转发草稿MailItem对象
if (replyDraft != null)
{
    Outlook.Conversation conv = replyDraft.GetConversation();
    if (conv != null)
    {
        Outlook.SimpleItems rootItems = conv.GetRootItems();
        foreach (object item in rootItems)
        {
            if (item is Outlook.MailItem originalMail)
            {
                string originalEntryID = originalMail.EntryID;
                // 这里拿到了原邮件的EntryID
                break;
            }
        }
    }
}

方法二:通过InReplyTo和Namespace搜索原邮件

如果会话方法不适用,可利用草稿的InReplyTo属性(存储原邮件主题)结合命名空间搜索:

  • 获取Outlook.NameSpace对象(通常为Application.Session)
  • 构建搜索过滤器,匹配Subject等于InReplyTo,同时限定原邮件所在文件夹(比如收件箱)
  • 执行搜索后提取匹配邮件的EntryID

示例代码(C#):

Outlook.MailItem replyDraft = // 你的回复/转发草稿MailItem对象
Outlook.NameSpace ns = Globals.ThisAddIn.Application.Session;
if (replyDraft != null && !string.IsNullOrEmpty(replyDraft.InReplyTo))
{
    // 转义主题中的单引号,避免过滤器语法错误
    string escapedSubject = replyDraft.InReplyTo.Replace("'", "''");
    string filter = $"[Subject] = '{escapedSubject}'";
    Outlook.Items items = ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox).Items.Restrict(filter);
    foreach (object item in items)
    {
        if (item is Outlook.MailItem originalMail)
        {
            string originalEntryID = originalMail.EntryID;
            // 处理逻辑
            break;
        }
    }
}

注意事项

  • 会话方式更可靠,不会因主题重复导致匹配错误
  • 搜索方式需注意转义主题中的特殊字符,避免过滤器语法报错
  • 若原邮件不在默认收件箱,需调整搜索的文件夹范围

内容的提问来源于stack exchange,提问作者teleixi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 12:54:58