【问题标题】:Integrating POP3 client functionality into a C# application?将 POP3 客户端功能集成到 C# 应用程序中?
【发布时间】:2010-09-19 04:19:11
【问题描述】:

我有一个 Web 应用程序,它需要基于服务器的组件来定期访问 POP3 邮箱和检索电子邮件。然后该服务需要处理电子邮件,这将涉及:

  • 根据某些业务规则验证电子邮件(它是否在主题行中包含有效的引用、发送邮件的用户等)
  • 分析所有附件并将其保存到磁盘
  • 获取电子邮件正文和附件详细信息并在数据库中创建一个新项目
  • 或更新引用与传入电子邮件主题行匹配的现有项目

解决此问题的最佳方法是什么?我真的不想从头开始编写 POP3 客户端,但我需要能够自定义电子邮件的处理。理想情况下,我将能够插入一些为我进行访问和检索的组件,返回附件数组、正文、主题行等,以供我处理...

[更新:评论]

好的,所以我花了很多时间研究(主要是免费的).NET POP3 库,所以我想对下面提到的一些库和其他一些库进行简短回顾:

  • Pop3.net - 免费 - 工作正常,就提供的功能而言非常基本。这几乎只是 POP3 命令和一些 base64 编码,但它非常简单 - 可能是一个很好的介绍
  • Pop3 Wizard - 商业/一些开源代码 - 无法构建,缺少 DLL,我不会为此烦恼
  • C#Mail - 免费供个人使用 - 运行良好,附带 Mime 解析器和 SMTP 客户端,但是 cmets 是日文(不是什么大问题),它不适用于 SSL '开箱即用' - 我必须更改 SslStream 构造函数,之后它就没有问题了
  • OpenPOP - 免费 - 大约 5 年没有更新了,所以它的当前状态是 .NET 1.0,不支持 SSL,但这没有问题要解决 - 我只是用 SslStream 替换了现有的流并且它工作。附带 Mime 解析器。

在免费库中,我会选择 C#Mail 或 OpenPOP。

我查看了几个商业库:Chillkat、Rebex、RemObjects、JMail.net。根据公司的功能、价格和印象,我可能会选择 Rebex,如果我的需求发生变化或者我在使用 C#Mail 或 OpenPOP 时遇到生产问题,我可能会选择 Rebex。

如果有人需要,这是我用来通过 C#Mail 和 OpenPOP 启用 SSL 的替代 SslStream 构造函数:

SslStream stream = new SslStream(clientSocket.GetStream(), false,
                 delegate(object sender, X509Certificate cert,
                 X509Chain chain, SslPolicyErrors errors) { return true; });

【问题讨论】:

  • 感谢您更新并提供您的研究详情。
  • +1;有一个非常相似的要求。感谢您进行研究。
  • 一个小评论:我已经测试了几个提到的实现,并且必须使用来自anmar.eu.org/projects/sharpmimetools/files/daily 的最新每日来获得正确的 MIME 解码。 c#Mail 无法正确解码非 ascii,而大多数其他人在 utf8、q 编码或其他细节方面都失败了。
  • 我在我的应用程序中使用了 SharpMimeTools,它非常可靠。
  • C#Mail 已移至higlabo.codeplex.com

标签: .net pop3 review


【解决方案1】:

一个新选项(截至 2014 年)是来自 Xamarin 的 MailKit,在 MIT 许可下可用。它从磁盘解析消息的速度比 OpenPOP.NET 快 25 倍。它包括对 IMAP、POP3 和 SMTP 的支持,并且看起来非常快速和强大。

【讨论】:

    【解决方案2】:

    SslStream类的构造函数被修改并上传。 推荐版本使用没问题。

    【讨论】:

    • -1 因为这个答案并没有真正提供任何有用的说明或链接。
    【解决方案3】:

    因为我不得不自动化一些电子邮件处理的事情。我拿了 OpenPop.net 我正在搜索如何使用这个库转发邮件消息并遇到了这个惊人的功能:http://hpop.sourceforge.net/documentation/OpenPop~OpenPop.Mime.Message.ToMailMessage.html

    总结一下,我选择了OpenPop.Net并推荐它!

    最好的问候, JP

    【讨论】:

    • 我也刚刚发现了'惊人'的功能,但我发现新的MailMessage 中缺少图像,并且它的Headers 集合是空的,这让我有点警惕。
    【解决方案4】:

    我是OpenPop.NET 的主要开发者之一。我刚刚看完这篇评论,不得不就 OpenPop.NET 的当前状态提出一些意见,因为评论似乎已经过时了。

    OpenPop.NET 重新开始积极开发。 SSL 已在半年前推出。该项目进行了重大重构,现在更加稳定和易于使用。当我接手这个项目时,它有很多错误,截至目前我一无所知。已经实现了很多额外的功能,主要是在 MIME 解析器部分。该项目由单元测试支持,每次发现错误时,都会创建一个单元测试以在修复之前显示此错误。现在存在带有示例的accompanying website。还有其他更新,但我不想全部提及。

    此外,OpenPop.NET 的许可证已从 LGPL 更改为 Public Domain(又名,没有限制)。我认为这对商业用户来说是一个重大改进。

    【讨论】:

      【解决方案5】:

      您可能希望将Mail.dll .NET mail component 包含在您的排名中。 它具有 SSL 支持、Unicode 和多国电子邮件支持:

      using(Pop3 pop3 = new Pop3())
      {
          pop3.Connect("mail.host.com");      // Connect to server
          pop3.Login("user", "password");     // Login
      
          foreach(string uid in pop3.GetAll())
          {
              IMail email = new MailBuilder()
         .CreateFromEml(pop3.GetMessageByUID(uid));
      
              Console.WriteLine(email.Subject);
          }
          pop3.Close(true);  
      }
      

      还支持 IMAP 协议。

      请注意,这是我创建的商业产品。

      你可以在这里下载:http://www.lesnikowski.com/mail

      【讨论】:

        【解决方案6】:

        在 codeproject.com 上有几个 POP3 客户端实现。我没有对它们进行评估,但也许你可以在那里找到你需要的东西。如果不是,我可以说 POP3 是一个非常简单的协议。如果您知道 4-5 个命令,您甚至可以使用 telnet 读取您的 POP3 框。

        您实际上只需要this 命令,也许还需要一些base64 解码附件。就是这样。

        【讨论】:

        • 我认为你低估了 MIME 在现实世界中的复杂性和多样性。
        【解决方案7】:

        如果您需要 SSL 来访问 gmail。这里是对 OpenPOP.net 库的一些修改,使其支持 SSL。

        OpenPop.net modified to include SSL support for accessing Gmail

        【讨论】:

          【解决方案8】:

          Lumisoft 是开源的,包括一个 POP 客户端(以及其他东西)。已经存在很多年了,非常稳定。

          【讨论】:

          • 最近似乎出现了一波对完全有效的答案投反对票的浪潮。
          【解决方案9】:

          我制作了自己的 Mime 解析器并将其添加到 CodePlex,因为当涉及到奇怪的编码和奇怪的附件组合时,我不断遇到其他未处理的异常。 pop3 客户端实现很粗糙,只是为了测试目的而制作的,但可以处理。 Mime 解析器部分填充标准 MailMessage 对象,以便您可以轻松地转发它。我可以根据要求扩展/改进它,但现在它可以满足我的需要。请随意查看。

          http://www.codeplex.com/mimeParser

          【讨论】:

            【解决方案10】:

            看看我的开源应用程序 BugTracker.NET 中的 POP3 集成http://ifdefined.com/bugtrackernet.html。所有免费和开源。最难的部分是 mime 解析,由 SharpMimeTools 在 BugTracker.NET 中完成,地址为 http://anmar.eu.org/projects/sharpmimetools/

            显示我如何使用 POP3 和 MIME 逻辑的重要文件是 POP3Client.cs 和 insert_bug.aspx。

            【讨论】:

            • 哦,是的。哑剧是皮塔饼!如果都是纯文本,那还不错:)我希望为了他们的缘故是纯文本:)
            【解决方案11】:

            我最近为一个项目实现了OpenPop,对此很满意。它按照它在锡上说的做。 (而且它是免费的。)

            【讨论】:

              【解决方案12】:

              DasBlog 使用了一个很好的(而且免费的)——获取源包。我用过它(但我不记得是谁写的,而且我不在笔记本电脑上——我想是 Pavel L?)。它并不完美,而且它不支持 SSL,但它在其他方面工作得很好。

              【讨论】:

              • dasBlog 使用 Lesnikowski.Pawel.Mail.Pop3 (lesnikowski.com/mail)。它现在是一个商业产品,但 dasblog 中的版本仍然是开源的
              【解决方案13】:

              C# Mail 在 Codeplex 上可用,并且非常易于使用。

              【讨论】:

                【解决方案14】:

                如果您不介意为组件付费,我们过去在 chilkat 方面取得了巨大成功。花几百美元,你就可以得到一个挤满了善良的图书馆。

                【讨论】:

                  【解决方案15】:

                  Jmail.NET。不要再看下去了。请注意,免费版本不包括 POP3。您需要使用标准版(或更多)。别担心,它不贵。

                  【讨论】:

                    猜你喜欢
                    • 2011-09-24
                    • 1970-01-01
                    • 2011-10-17
                    • 2018-03-02
                    • 2012-09-06
                    • 2011-09-28
                    • 2011-01-11
                    • 1970-01-01
                    • 2020-03-26
                    相关资源
                    最近更新 更多