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

如何从Microsoft.Office.Interop.Outlook.Folder获取长期EntryID?

获取Outlook Table中的长期EntryID

默认情况下,Outlook的Table对象返回的是短期(会话特定)EntryID,这类ID会在Outlook重启或会话切换后失效。要获取长期有效的EntryID,有两种可行方案:

方案一:直接在Table中添加长期EntryID属性列

长期EntryID对应的MAPI属性是PR_ENTRYID_LONG,其属性标签为0x0FFF0102。你可以直接通过这个属性的Schema URL添加到Table的列中,从而直接读取长期ID:

Table table = folder.GetTable();
// 添加长期EntryID列(使用MAPI属性的Schema URL)
table.Columns.Add("http://schemas.microsoft.com/mapi/proptag/0x0FFF0102");
table.Columns.Add("SenderEmailAddress");

while (!table.EndOfTable)
{
    Row row = table.GetNextRow();
    // 读取长期EntryID
    string longEntryId = row["http://schemas.microsoft.com/mapi/proptag/0x0FFF0102"].ToString();
    string sender = row["SenderEmailAddress"].ToString();
    
    // 后续业务逻辑处理
}

这种方法的优势是高效,无需额外加载邮件对象,直接从Table结果集中获取数据。

方案二:将短期EntryID转换为长期EntryID

如果已经获取了短期EntryID,可以通过Outlook的Namespace对象将其转换为长期ID。这种方式需要逐个加载对应的邮件项,适合需要同时处理邮件其他属性的场景,但要注意释放COM对象避免内存泄漏:

// 假设已经获取了Outlook Application实例
Outlook.NameSpace ns = application.GetNamespace("MAPI");
ns.Logon();

Table table = folder.GetTable();
table.Columns.Add("SenderEmailAddress");

while (!table.EndOfTable)
{
    Row row = table.GetNextRow();
    string shortEntryId = row["EntryID"].ToString();
    
    // 通过短期ID获取邮件对象,进而得到长期EntryID
    Outlook.MailItem mailItem = ns.GetItemFromID(shortEntryId) as Outlook.MailItem;
    string longEntryId = mailItem?.EntryID;
    string sender = row["SenderEmailAddress"].ToString();
    
    // 释放COM对象,避免内存泄漏
    if (mailItem != null)
    {
        System.Runtime.InteropServices.Marshal.ReleaseComObject(mailItem);
    }
}

注意事项

  • 优先选择方案一,因为它的性能更优,尤其是处理大量邮件时;
  • 使用方案二时,必须确保及时释放COM对象,否则可能导致Outlook进程无法正常退出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 19:35:45