c#-以编程方式从outlook电子邮件中删除附件
我想在outlook中删除邮件中的所有附件。不知道,我做错了什么。代码不会导致异常,但删除后附件仍然可用。这是我的代码: 这将为我提供一个outlook.application对象(如果它正在运行或正在运行outlook,如果它未运行):c#-以编程方式从outlook电子邮件中删除附件,c#,outlook,C#,Outlook,我想在outlook中删除邮件中的所有附件。不知道,我做错了什么。代码不会导致异常,但删除后附件仍然可用。这是我的代码: 这将为我提供一个outlook.application对象(如果它正在运行或正在运行outlook,如果它未运行): public static OL.Application GetOutlook(out bool StillRunning) { OL.Application OLApp = null; if (System.
public static OL.Application GetOutlook(out bool StillRunning)
{
OL.Application OLApp = null;
if (System.Diagnostics.Process.GetProcessesByName("OUTLOOK").Count() > 0)
{
StillRunning = true;
return System.Runtime.InteropServices.Marshal.GetActiveObject("Outlook.Application") as Microsoft.Office.Interop.Outlook.Application;
}
else
{
StillRunning = false;
OLApp = new OL.Application();
OL.NameSpace nameSpace = OLApp.GetNamespace("MAPI");
nameSpace.Logon("", "", System.Reflection.Missing.Value, System.Reflection.Missing.Value);
nameSpace = null;
return OLApp;
}
}
此函数通过其EntryID返回邮件:
public static OL.MailItem GetMailByEntryId(OL.Application OlApp, string MailItemEntryID)
{
OL.NameSpace olNS = null;
object obj = null;
olNS = OlApp.GetNamespace("MAPI");
if (olNS == null) { throw new System.Exception("ERROR: Unable to get Namespace 'MAPI' in Outlook.Application object!"); }
OL.MailItem MI = null;
obj = olNS.GetItemFromID(MailItemEntryID);
if (obj != null && obj is OL.MailItem) { MI = obj as OL.MailItem; }
if (MI == null) { throw new System.Exception("ERROR: Unable to get mail item by ID " + System.Environment.NewLine + MailItemEntryID); }
return MI;
}
在此,我尝试删除邮件的附件:
public static void RemoveAttachments(string EntryID)
{
bool StillRunning = false;
OL.Application OLApp = GetOutlook(out StillRunning);
OL.MailItem MI = GetMailByEntryId(OLApp, EntryID);
for(int i = 0; i < MI.Attachments.Count; i++) { MI.Attachments.Remove(i); } //Methode Delete() not available...
MI.Save();
if (!StillRunning) { OLApp.Quit(); OLApp = null; System.GC.Collect(); KillOutlook(); }
}
publicstaticvoidremoveattachments(stringentryid)
{
bool-StillRunning=false;
OL.Application OLApp=GetOutlook(仍在运行);
OL.MailItem MI=GetMailByEntryId(OLApp,EntryID);
对于(int i=0;i
谢谢大家的帮助…啊,明白了-你可以这样做:
foreach(OL.Attachment Att in MI.Attachments){Att.Delete();}
OOM中的所有集合(包括MailItem.Attachments
)都基于1,而不是0。您还在循环时修改集合-使用向下循环:
Attachments attachments = MI.Attachments;
for(int i = attachments.Count; i >= 1; i--) { Attachments.Remove(i); }
你还没有展示你是如何发送邮件的,entryID来自哪里,为什么不直接传递邮件呢?啊,非常感谢-现在我知道了,为什么它没有删除所有文件。