【问题标题】:Deleting mailitems from Outlook public folders从 Outlook 公用文件夹中删除邮件项
【发布时间】:2016-10-09 11:41:52
【问题描述】:

在几个公用文件夹中大约有 15 个特定的公用文件夹,我要从中删除超过 15 天的邮件项。每个公用文件夹都有大约 1000 多个邮件项。每周都是相同数量的物品。目前我正在获取默认的公用文件夹并循环每个子文件夹并删除邮件。

Microsoft.Office.Interop.Outlook.Folder tempInbox = tempApp.Session.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olPublicFoldersAllPublicFolders) as Microsoft.Office.Interop.Outlook.Folder;
**SOME Code***
foreach (Microsoft.Office.Interop.Outlook.Folder subfolder1 in     subfolder.Folders)
{
if ((check those 14 subfolder names )& (subfolder1.Folders.Count > 0))
{
    CheckCountries(subfolder1, sw);
}
}
CheckCountries(subfolder1, sw) -> Here I am comparing and deleting the mail items.

//Deletion part of code below
foreach (object todel in delItem)
{
DateTime d1 = DateTime.Now;
Microsoft.Office.Interop.Outlook.MailItem mailitmType = todel as  Microsoft.Office.Interop.Outlook.MailItem;
if (mailitmType is Microsoft.Office.Interop.Outlook.MailItem)
{
    if ((mailitmType.IsConflict != true) &  (mailitmType.MessageClass.Contains("IPM.Note.SMIME") == false))
    {
    DateTime d2 = mailitmType.ReceivedTime;
    if ((d1 - d2).TotalDays > iDays)
    {
    sw.WriteLine("Deleting Mail with Subject line as = \"" + mailitmType.Subject + "\"   and Received time = " + mailitmType.ReceivedTime);
    mailitmType.Delete();
    iCnt = iCnt + 1;
   } //mailitmType.Save();
    }
}
}

我想在以下方面进行改进 -

  • 在读取所有 每个邮件项(如果有 2000 个,其中只有 1000 个大于 15 天) 15 个文件夹,比较邮件的年龄,然后删除。
  • 某些文件夹因访问问题而失败。所以我需要在代码的开头添加一个 id,它可以访问所有这些公共文件夹并且可以用来删除。目前,它采用运行可执行文件的默认 ID。

【问题讨论】:

    标签: c# outlook office-interop public-folders


    【解决方案1】:

    永远不要遍历文件夹中的所有项目 - 使用 Items.Find/FindNextItems.RestrictReceivedTime 属性的查询小于某个值。

    【讨论】:

    • 感谢德米特里的建议。我厌倦了使用 Items.Find/FindNext 如下代码,但项目没有得到识别。您能否就以下代码可能有什么问题提出建议。我收到异常,因为 'resultItem.ReceivedTime '((Microsoft.Office.Interop.Outlook._MailItem)(resultItem))' is null System.DateTime'跨度>
    • Microsoft.Office.Interop.Outlook.MailItem resultItem = delItem as Microsoft.Office.Interop.Outlook.MailItem;resultItem = null; if (delItem.Count > 0) {string filter = "(delItem.ReceivedTime - DateTime.Now).TotalDays> 15"; resultItem = delItem.Find(过滤器); while (resultItem != null){ (resultItem 是 Microsoft.Office.Interop.Outlook.MailItem) { iCnt++; sw.WriteLine("删除主题行 = \"" + resultItem.Subject + "\" 和接收时间 = " + resultItem.ReceivedTime); ////resultItem.Delete(); }Marshal.ReleaseComObject(resultItem);resultItem = delItem.FindNext();
    • 这不是一个有效的条件。你需要像“[ReceivedTime] > '10/7/2016'”这样的东西
    猜你喜欢
    • 1970-01-01
    • 2017-06-16
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 2014-12-04
    • 2013-10-19
    相关资源
    最近更新 更多