c#搜索所有Outlook文件夹的邮件项目的主题

本文关键字:项目 文件夹 搜索 Outlook | 更新日期: 2023-09-27 18:18:57

我正在尝试使用c#搜索我的Outlook收件箱(和所有子文件夹)的MailItem的主题匹配我的Regex。

目前我有这个:

//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的当前邮箱搜索功能,而不是当前文件夹

我已经尝试创建我所有子文件夹的邮件的List<MailItem>,但这需要太长时间来执行。

是否有一种有效的方法来查询收件箱&子文件夹吗?

c#搜索所有Outlook文件夹的邮件项目的主题

不要遍历文件夹中的所有项目,也不要在Outlook中使用LINQ——这是非常低效的。

MAPIFolder.Items使用。查找/FindNext/Restrict

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