有没有更好的方法来根据日期过滤邮件?

时间:2012-12-17 10:55:05

标签: c# outlook-2010

好吧,我遇到了一个问题。

我正在使用MS Outlook使用C#从我收到的电子邮件中生成一些基于excel的报告。

现在,最初当我开始这个时,可以正常,因为文件夹中的电子邮件数量少了一点。几天之后,这个数字变成了数千个。

 Application app = null;
            _NameSpace ns = null;
            MailItem item = null;
            MAPIFolder inboxFolder = null;
            MAPIFolder subFolder = null;

            DateTime MyDateTime;
            MyDateTime = new DateTime();
            MyDateTime = DateTime.ParseExact(dateFilter, "yyyy-MM-dd HH:mm tt", null);

            try
            {
                app = new Application();
                ns = app.GetNamespace("MAPI");
                ns.Logon(null, null, false, false);

                inboxFolder = ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);
                subFolder = inboxFolder.Folders["Alerts"];


                for (int i = 1; i <= subFolder.Items.Count; i++)
                {
                    item = (Microsoft.Office.Interop.Outlook.MailItem)subFolder.Items[i];

                    string subject = item.Subject;
                    DateTime sent = item.SentOn;

                    if (item.SentOn > MyDateTime && item.SentOn < MyDateTime.AddDays(1))
{//Do some logging
}}

现在上面代码的问题是它从上一封收到的电子邮件开始搜索。这导致它增加了到达“过滤器”所需的时间。

如果有的话,我需要改进代码的建议。

感谢您的阅读。

1 个答案:

答案 0 :(得分:3)

在循环之前,从Restrict方法过滤的subFolder中获取一组项目。 您可以在您使用的过滤器字符串中使用您的日期范围(我之前没有写过它,因为我无法测试它并且不想误导您 - 搜索应该举出很多例子)。然后循环/遍历生成的集合,然后应该只包含您需要的项目。

Microsoft.Office.Interop.Outlook.Items restrictedItems = subFolder.Items.Restrict("*filter*");

for (int i = 1; i <= restrictedItems.Count; i++)...