【问题标题】:C# Searching All Outlook Folders for MailItem by SubjectC# 按主题在所有 Outlook 文件夹中搜索 MailItem
【发布时间】:2021-07-16 11:20:39
【问题描述】:

我正在尝试使用 C# 在我的 Outlook 收件箱(和所有子文件夹)中搜索主题与我的正则表达式匹配的 MailItem。

目前我有这个:

//InboxItems property
public IEnumerable<MailItem> InboxItems
{
    get
    {
        Microsoft.Office.Interop.Outlook.MAPIFolder folder = 
            outlook.GetNamespace("MAPI").GetDefaultFolder(OlDefaultFolders.olFolderInbox);
            return folder.Items.OfType<MailItem>();
    }
} 

//inside method:
string ticketid = "6543165";
Regex rgx = new Regex(@"^((FWD|RE): ?)*Ticket Diary ?[:-] ([0-9]+ )*\b" + ticketid,
    RegexOptions.IgnoreCase | RegexOptions.Compiled);
var email = InboxItems.OrderBy(m => m.CreationTime)
            .FirstOrDefault(m => m.CreationTime >= createdAfter && rgx.IsMatch(m.Subject)); 

仅当电子邮件在我的收件箱文件夹中时,这才有效。但是,我想模仿 Outlook 的 当前邮箱 搜索功能,而不是 当前文件夹。

我已尝试为我的所有子文件夹的 MailItems 创建一个 List&lt;MailItem&gt;,但这需要很长时间才能执行。

有查询收件箱和子文件夹的有效方法吗?

【问题讨论】:

    标签: c# regex outlook


    【解决方案1】:

    永远不要遍历文件夹中的所有项目或将 LINQ 与 Outlook 一起使用 - 这是非常低效的。

    使用MAPIFolder.Items.Find/FindNext/Restrict。

    如果要搜索多个文件夹,请使用Application.AdvancedSearch - https://msdn.microsoft.com/en-us/library/office/ff866933.aspx

    【讨论】:

    • 谢谢德米特里。我在发布后找到了Redemption。我将使用 RDO,因为它还可以解决我遇到的安全补丁问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    • 2019-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多