C#按主题搜索MailItem的所有Outlook文件夹

时间:2015-10-23 19:05:35

标签: c# regex outlook

我正在尝试使用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<MailItem>,但执行时间太长。

是否有一种有效的方式来查询收件箱&amp;子文件夹?

1 个答案:

答案 0 :(得分:2)

不要迭代文件夹中的所有项目或使用LINQ与Outlook - 这是非常低效的。

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

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