我的收件箱里只有 16,000 多件物品。我有一个业务需要抓取此收件箱中的所有项目并将它们与另一个数据集进行比较。
使用 Outlook Interop,我只能获得大约 5,000 个项目,直到我在此站点上阅读此帖子。
简而言之,this other post建议立即将文件夹中的所有项目放入一个单独的genericList<MailItem>
中,它可以工作(有人知道为什么吗?)
foreach (var itm in inbox.Items)
{
if (itm is MailItem)
{
if (!mailItemList.Contains(itm))
{
mailItemList.Add(itm as MailItem);
}
}
else
{
if (!notMailItemList.Contains(itm))
{
notMailItemList.Add(itm);
}
}
}
这真的很有帮助,在将所有内容插入MailItems
到 generic之后List
,我能够得到正确的计数。
我仍然无法阅读所有项目。我已经能够从超过 15,000 个项目中读取和获取数据。在那之后,我不完全确定会发生什么,但我相信我的内存不足了。我确实遇到了内存不足异常,但并非总是如此。
因此,这个问题一直难以追查。我发现我可以循环所有项目,例如,测试一个项目是否为 MailItem 并将其计算在内,但我无法访问项目中的数据。
示例: -- 这实际上会给出正确的计数
foreach (MailItem mi in mailItemList)
{
counter++;
}
示例:这将“截断计数”:
foreach (MailItem mi in mailItemList)
{
string fromAddress = string.Empty;
if (mi != null && mi.SenderEmailAddress != null && !string.IsNullOrEmpty(mi.SenderEmailAddress))
{
fromAddress = mi.SenderEmailAddress;
}
counter++;
}
关键是,如果我尝试从 中获取任何数据List
,我无法从收件箱中获取所有数据。在我的情况下,部分数据是无用的。
我试图使用其他工具。我将 PST 导出到文件中。它的大小约为 37 GB。赎回工具没用。我什至无法让它工作,他们的支持非常糟糕。我试过PST .NET,虽然这个工具确实有效,但它运行了大约 30 分钟,然后给了我一个内存不足的错误。
我快没希望了。我的下一步是尝试使用MailSystem.NET 程序集并直接连接到 RackSpace 服务器,但是我的连接不起作用(IMAP4 尝试的流意外结束)。
如果有人对如何直接从 Outlook 收件箱或从导出的 PST 中获取所有项目有解决方案,我将不胜感激。