使用vsto从outlook mailitem删除附件

时间:2017-06-15 19:32:36

标签: c# outlook vsto

我正在为outlook 2013开发一个Addin。这是一个示例项目,我想要做的是从mailitem中删除所有附件。我就是这样做的

while (mail.Attachments.Count > 0)
 {
    try
    {
      mail.Attachments.Remove(1);
     }
       catch(Exception e)
     {
        MessageBox.Show(e.Message);
     }

 }

编辑:我也试过用倒置删除它们的方法  for loop(for i = mail.Attachments.Count; i > 1; i--)但结果相同

它的工作正常,除了它在控制台上抛出此异常的事实:

抛出异常:PCMailAddIn.dll中的'System.Runtime.InteropServices.COMException'

抛出异常:mscorlib.dll中的'System.Reflection.TargetInvocationException'

2 个答案:

答案 0 :(得分:0)

// Remove all attachments

var allIndexesList = mailItem.Attachments.Cast<Outlook.Attachment>().ToList();

var descIndexes = allIndexesList.Select(a => a.Index).OrderByDescending(i => i).ToArray();


foreach(var i in indexes)
{
    try
    {
        mailItem.Attachments.Remove(i);
    }
    catch (COMException e)
    {
        MessageBox.Show(e.Message);
    }
}

答案 1 :(得分:0)

您可以访问每个附件,然后删除该索引处的对象。试试这个:     //删除所有附件     var attachments = mailItem.Attachments.Cast()。ToList();     if(attachments.Any())     {         attachments.Reverse();         attachments.ForEach(att =&gt; mailItem.Attachments.Remove(att.Index));     }