【问题标题】:Microsoft Outlook Interop (extract attachments) very slowMicrosoft Outlook 互操作(提取附件)非常慢
【发布时间】:2012-06-12 13:55:16
【问题描述】:

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

【问题讨论】:

  • 有完整源代码的最终解决方案吗?

标签: interop outlook ms-office mapi


【解决方案1】:

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

【讨论】:

  • 谢谢!不幸的是,您的链接不起作用。你能帮我进一步吗?我试过: ExampleFolder.Items.Restrict("[PR_HAS_ATTACH]");没有成功。
  • 这不是链接,这是属性 DASL 名称。示例见msdn.microsoft.com/en-us/library/bb612664.aspx
【解决方案2】:

@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();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-24
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多