【问题标题】:How to programmatically access old archived mails in Outlook in plug-in如何在插件中以编程方式访问 Outlook 中的旧存档邮件
【发布时间】:2023-03-07 00:22:02
【问题描述】:

我在 C# 中为 Outlook 开发了 VSTO 插件。我的 Outlook 配置为 OST 以显示 30 天前的邮件。但是,当我单击“单击此处查看 Microsoft Exchange 的更多信息”时,它会显示 Exchange 服务器上存在的所有旧邮件。但即便如此,当我尝试使用 OOM 模型访问这些邮件时,它只返回 OST 中存在的邮件,而不返回其他邮件(尽管这些邮件在 Outlook 视图中可见)。

我正在使用以下代码来获取邮件:--

MAPIFolder currentFolder = GetCurrentFolder();
Items col = currentFolder.Items;
int count = col.Count;

即使我已经通过单击“单击此处查看有关 Microsoft Exchange 的更多信息”加载了较旧的邮件,它也会返回相同的计数。所以我有以下问题:--

1- 如果不允许我手动更改 Outlook 配置(因为它由组策略控制),我可以使用 Outlook 对象模型访问旧邮件吗? 2-如果在 OOM 中不可能,我们可以在扩展的 MAPI / C++ 中实现吗?如果是的话,我可以举一些例子吗?我已经在使用扩展 MAPI 在 C# 代码中获取 mime 源代码。

【问题讨论】:

    标签: c# outlook vsto outlook-addin mapi


    【解决方案1】:

    是的,您可以使用MAPI_NO_CACHE 标志以在线模式打开文件夹。

    如果 C++ 或 Delphi 中的扩展 MAPI 不是一个选项,您可以使用 Redemption(任何语言) - 它的 RDOSession/RDOStore.GetFolderFromID 完全支持 MAPI_NO_CACHE 标志。

    编辑:
    要使用 Redemption 打开文件夹,只需执行以下操作

    const int MAPI_BEST_ACCESS = 0x10;
    const int MAPI_NO_CACHE = 0x200;
    RDOSession session = new RDOSession(); //or use RedemptionLoader.new_RDOSession();
    session.MAPIOBJECT = Globals.ThisAddIn.Application.Session.MAPIOBJECT;
    RDOFolder folder = session.GetFolderFromID(YourOomFolder.EntryID, Missing.Value, MAPI_BEST_ACCESS | MAPI_NO_CACHE);
    //you can now loop through folder.Items collection or use
    //Items.Find/FindNext, Items.MAPITable.ExecSQL, etc.
    

    【讨论】:

    • 感谢您的回答。我猜你误会了。我已经使用了扩展 MAPI。因此,如果我找到 C# 的一些示例,我可以使用它。关于兑换,我的插件已经在生产中。我不知道,在这个阶段使用救赎会带来多少痛苦,需要多少努力。所以,我更愿意先尝试扩展 MAPI。
    • 使用.Net 语言的扩展MAPI 确实不是一个好主意,尽管有些人尝试过。曾经有一个名为 MAPI33 的库,但不再支持。
    • 查看上面的更新答案,了解如何使用 Redemption 在在线模式下打开文件夹。
    • 听起来不错。让我试试评估版,看看它是否有效。如果它很容易集成到运行产品中,我们可以使用它。
    • 不要使用 [] - Redemption 使用 SQL 语法。
    猜你喜欢
    • 2017-01-28
    • 1970-01-01
    • 2017-11-08
    • 1970-01-01
    • 2011-02-04
    • 2013-05-01
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    相关资源
    最近更新 更多