Microsoft Outlook Interop(提取附件)非常慢

时间:2012-06-12 13:55:17

标签: interop outlook ms-office mapi

我正在使用 Microsoft.Office.Interop.Outlook 来提取电子邮件附件:

var MAPI = new Application().GetNamespace("MAPI");
var ExampleFolder = MAPI.GetDefaultFolder(OlDefaultFolders.olFolderSentMail)

foreach (dynamic i in ExampleFolder.Items)
  if (i.Attachments.Count > 0)
    ; // DoSomething();

不幸的是,非常慢

  • 有没有更快的方法来检查附件?
  • 是否可以按日期过滤/排序电子邮件:仅循环显示最后n个项目?

2 个答案:

答案 0 :(得分:3)

当然,您可以使用Items.Sort对集合进行排序。 您还可以使用Items.Find / FindNext或Items.Restrict来查找仅包含附件的项目。您需要的属性是PR_HASATTACH(DASL名称http://schemas.microsoft.com/mapi/proptag/0x0E1B000B

答案 1 :(得分:0)

@Kiquenet(我不能在您的评论下方添加评论),这是从Items.Restrict获取带有附件的项目的代码:

//fanti's code
var MAPI = new Application().GetNamespace("MAPI");
var ExampleFolder = MAPI.GetDefaultFolder(OlDefaultFolders.olFolderSentMail)

要按日期过滤,只需添加“ AND”或“ OR”即可( Urn ):

var itemsWithAttachmentAndDate = ExampleFolder.Items.Restrict("@SQL= urn:schemas:httpmail:hasattachment = True"
 + " AND urn:schemas:httpmail:datereceived <= '" + DateTime.Now.AddMonths(-3) + "'");

仅循环显示最后n个项目:

int n = 3;
for (int i = itemsWithAttachmentAndDate.Count - 1; i > n; i--)
{
    //current item: itemsWithAttachmentAndDate[i] //Beware: "dynamic" typed!
    ; //DoSomething();
}