Outlook Interop GetTable 操作随机失败

问题描述

我使用此代码在 Outlook 中查找电子邮件

Microsoft.Office.Interop.outlook.application outlook;
outlook = new Microsoft.Office.Interop.outlook.application();

Microsoft.Office.Interop.Outlook.Folder folder = outlook
    .GetNamespace("MAPI")
    .Folders
    .OfType<Microsoft.Office.Interop.Outlook.Folder>()
    .Skip(1)
    .First()
    .Folders
    .OfType<Microsoft.Office.Interop.Outlook.Folder>()
    .Skip(1)
    .First()
    .Folders
    .OfType<Microsoft.Office.Interop.Outlook.Folder>()
    .First();
        
string query = @"@sql=""urn:schemas:httpmail:textdescription"" like '%3Z70699Y0404605413%'";

var table = folder.GetTable(query); // operation fails sometimes

它有效,但随机它不起作用。 GetTable 有时会给出类似 operation Failed错误(确切的措辞是“Operace se nezdařila”)。异常中没有进一步的细节。随着时间的推移,情况似乎变得更糟,有时逐渐变成总是。我怀疑这可能与使用 linq 时泄漏 com 对象有关。但老实说不知道。欢迎提出任何想法。

解决方法

当涉及到 Outlook 对象模型时,这是一个非常奇怪的代码 - 永远不要硬编码文件夹索引,即使名称也是一种不好的做法。顺序无法保证,名称可以本地化。

你确定你最终得到了正确的文件夹吗? folder.Name 是否返回预期值?