2017-06-15 67 views
0

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

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

} 

编辑:我也尝试过的方式与倒 for循环(for i = mail.Attachments.Count; i > 1; i--)将其删除,但得到了同样的结果

,它工作正常除外事实上,它抛出在控制台上此异常:在PCMailAddIn.dll

“System.Runtime.InteropServices.COMException”

抛出异常:

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

回答

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

//另一种方式 //删除全部附件
变种附件= mailItem.Attachments.Cast ()ToList(); if(attachments.Any()) { attachments.Reverse(); attachments.ForEach(att => mailItem.Attachments.Remove(att.Index)); } – Guest1979

0

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

+0

关于这段代码做什么的解释? – Pyves

相关问题