繁体   English   中英

c# - 以编程方式从outlook电子邮件中删除附件

[英]c# - Programmatically remove attachments from outlook email

我想从outlook中删除所有附件。 不知道,我做错了什么。 代码不会导致异常,但删除后附件仍然可用。 这是我的代码:

这给了我一个outlook.application对象,如果它正在运行或正在运行outlook,如果它没有运行:

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

谢谢大家的帮助...

啊,得到它 - 你可以这样工作:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM