好吧,我遇到了一个问题。
我正在使用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
}}
现在上面代码的问题是它从上一封收到的电子邮件开始搜索。这导致它增加了到达“过滤器”所需的时间。
如果有的话,我需要改进代码的建议。
感谢您的阅读。
答案 0 :(得分:3)
在循环之前,从Restrict方法过滤的subFolder中获取一组项目。 您可以在您使用的过滤器字符串中使用您的日期范围(我之前没有写过它,因为我无法测试它并且不想误导您 - 搜索应该举出很多例子)。然后循环/遍历生成的集合,然后应该只包含您需要的项目。
Microsoft.Office.Interop.Outlook.Items restrictedItems = subFolder.Items.Restrict("*filter*");
for (int i = 1; i <= restrictedItems.Count; i++)...