2

我正在使用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 个项目?
4

2 回答 2

3

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

于 2012-06-12T14:24:54.750 回答
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();
}
于 2019-01-29T14:51:48.727 回答