【问题标题】:Not able to delete items from Outlook Deleted Items folder无法从 Outlook 已删除邮件文件夹中删除项目
【发布时间】:2018-02-02 01:12:24
【问题描述】:

我正在使用 Office 365 中的 Outlook,这是 C# 中的代码,我必须删除“已删除项目”文件夹中的项目。

当我做这个转换时它给出了一个错误:

var idList = (from MailItem item in binFolder.Items select item.EntryID).ToList();

这是完整的代码:

public void DeleteBin()
{
    ApplicationClass outlookApp = new ApplicationClass();
    var binFolder = outlookApp.Session
                              .GetDefaultFolder(OlDefaultFolders.olFolderDeletedItems);
    var idList = (from MailItem item in binFolder.Items select item.EntryID).ToList();
    DeleteFromId(idList);
}

// It gets a list of emails ID and remove it from the outlook
private void DeleteFromId(List<string> idList)
{
    foreach (var id in idList)
    {
        var item = (MailItem)mapiNameSpace.GetItemFromID(id);
        item.Delete();
    }
}

谢谢

【问题讨论】:

  • 我相信你必须提供binFolder.StoreID 作为mapiNameSpace.GetItemFromID 的第二个参数,否则这个调用可能并且很可能会失败。

标签: c# outlook


【解决方案1】:

如果该行出现错误

var idList = (from MailItem item in binFolder.Items select item.EntryID).ToList();

可能有多种原因:

  1. 并非文件夹中的所有项目都是MailItem 类型。
  2. 访问EntryID 属性时可能会引发异常。

您可以通过如下转换 Linq 语句来预防/处理此类问题:

var idList = new List<string>();
foreach (var item in binFolder.Items.OfType<MailItem>())
{
    try
    {
        idList.Add(item.EntryID);
    }
    catch (COMException ex)
    {
        Trace.WriteLine(ex);
    }
}

这修复了代码中的错误,但很可能以下代码会运行得更快,因为您不必再​​次检索每个项目:

var itemsToDelete = binFolder.Items.OfType<dynamic>().ToList();
foreach (var item in itemsToDelete)
{
    try
    {
        item.Delete();
    }
    catch (Exception ex)
    {
        Trace.WriteLine(ex);
    }
}

【讨论】:

  • @MarcosF8:如果您发现对 Stack Overflow 有帮助的答案,请点赞。谢谢。
猜你喜欢
  • 2017-11-13
  • 1970-01-01
  • 2017-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多