无法从 Outlook 已删除邮件文件夹中删除项目



>我正在使用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();
    }
}

谢谢

如果错误发生在行中

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

最新更新