我正在尝试使用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;子文件夹?
答案 0 :(得分:2)
不要迭代文件夹中的所有项目或使用LINQ与Outlook - 这是非常低效的。
使用MAPIFolder.Items.Find / FindNext / Restrict。
如果您要搜索多个文件夹,请使用Application.AdvancedSearch - https://msdn.microsoft.com/en-us/library/office/ff866933.aspx