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

1月021981

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

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

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

谢谢大家的帮助...

德米特里·斯特雷布列琴科

OOM 中的所有集合(包括MailItem.Attachments)都基于 1,而不是 0。您还在循环时修改集合 - 使用向下循环:

Attachments attachments = MI.Attachments;
for(int i = attachments.Count; i >= 1; i--) { Attachments.Remove(i); } 

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何以编程方式保存C#中由用户使用CTRL-C复制到剪贴板的Outlook电子邮件附件(例如PDF)

来自分类Dev

以编程方式从共享邮箱发送Outlook电子邮件

来自分类Dev

发送带有附件c的Outlook电子邮件

来自分类Dev

以编程方式删除Outlook签名

来自分类Dev

C#Outlook以编程方式访问CommandBar

来自分类Dev

如何以编程方式从Outlook保存附件?

来自分类Dev

Outlook删除我以编程方式创建的会议

来自分类Dev

Outlook 2013代码可根据发送电子邮件的方式保存附件

来自分类Dev

如何以编程方式为Outlook生成电子邮件线程?

来自分类Dev

如何通过vb.net发送电子邮件以编程方式捕获Outlook的异常?

来自分类Dev

以编程方式将PDF从MemoryStream附加到Outlook电子邮件项目

来自分类Dev

使用 bat 文件使用 Outlook 2013 以编程方式发送电子邮件

来自分类Dev

删除Outlook电子邮件中具有已知命名约定的附件

来自分类Dev

从发往Mac用户或SpiceWorks的Outlook电子邮件中删除签名/附件

来自分类Dev

C#-发送带有内联附件的电子邮件而没有Outlook的回形针图标吗?

来自分类Dev

使用C#以编程方式在Outlook中更改“发件人”名称

来自分类Dev

转发电子邮件及其在Outlook 2010中的附件

来自分类Dev

在签名下列出Outlook电子邮件中的附件

来自分类Dev

C#中的电子邮件附件

来自分类Dev

C#中的电子邮件附件

来自分类Dev

如何删除Outlook 2013的电子邮件回复中的>?

来自分类Dev

我如何从Outlook中删除大量电子邮件

来自分类Dev

在Outlook中已删除的电子邮件变为“已读”

来自分类Dev

如何自动删除Outlook 2016中的旧电子邮件?

来自分类Dev

从Outlook中的共享文件夹中读取带有C#的电子邮件

来自分类Dev

如何在Android中以编程方式sdk 4.0发送带有附件的电子邮件

来自分类Dev

C#捕获Outlook电子邮件正文

来自分类Dev

使用Outlook 2013和C#编写电子邮件

来自分类Dev

C#发送多行Outlook电子邮件

Related 相关文章

  1. 1

    如何以编程方式保存C#中由用户使用CTRL-C复制到剪贴板的Outlook电子邮件附件(例如PDF)

  2. 2

    以编程方式从共享邮箱发送Outlook电子邮件

  3. 3

    发送带有附件c的Outlook电子邮件

  4. 4

    以编程方式删除Outlook签名

  5. 5

    C#Outlook以编程方式访问CommandBar

  6. 6

    如何以编程方式从Outlook保存附件?

  7. 7

    Outlook删除我以编程方式创建的会议

  8. 8

    Outlook 2013代码可根据发送电子邮件的方式保存附件

  9. 9

    如何以编程方式为Outlook生成电子邮件线程?

  10. 10

    如何通过vb.net发送电子邮件以编程方式捕获Outlook的异常?

  11. 11

    以编程方式将PDF从MemoryStream附加到Outlook电子邮件项目

  12. 12

    使用 bat 文件使用 Outlook 2013 以编程方式发送电子邮件

  13. 13

    删除Outlook电子邮件中具有已知命名约定的附件

  14. 14

    从发往Mac用户或SpiceWorks的Outlook电子邮件中删除签名/附件

  15. 15

    C#-发送带有内联附件的电子邮件而没有Outlook的回形针图标吗?

  16. 16

    使用C#以编程方式在Outlook中更改“发件人”名称

  17. 17

    转发电子邮件及其在Outlook 2010中的附件

  18. 18

    在签名下列出Outlook电子邮件中的附件

  19. 19

    C#中的电子邮件附件

  20. 20

    C#中的电子邮件附件

  21. 21

    如何删除Outlook 2013的电子邮件回复中的>?

  22. 22

    我如何从Outlook中删除大量电子邮件

  23. 23

    在Outlook中已删除的电子邮件变为“已读”

  24. 24

    如何自动删除Outlook 2016中的旧电子邮件?

  25. 25

    从Outlook中的共享文件夹中读取带有C#的电子邮件

  26. 26

    如何在Android中以编程方式sdk 4.0发送带有附件的电子邮件

  27. 27

    C#捕获Outlook电子邮件正文

  28. 28

    使用Outlook 2013和C#编写电子邮件

  29. 29

    C#发送多行Outlook电子邮件

热门标签

归档