53

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

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

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

[更新:评论]

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

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

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

我查看了一些商业库:ChillkatRebexRemObjectsJMail.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; });
4

15 回答 15

28

我是OpenPop.NET的主要开发人员之一。我刚刚看完这篇评论,不得不对 OpenPop.NET 的当前状态发表一些评论,因为评论似乎随着开发的发展而过时。

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

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

于 2010-12-25T11:56:00.887 回答
7

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

于 2008-10-25T14:57:28.600 回答
6

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

于 2008-12-24T14:50:04.517 回答
3

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

于 2014-08-21T00:20:43.267 回答
2

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

于 2008-10-25T14:51:53.823 回答
2

您可能希望在排名中包含Mail.dll .NET 邮件组件。它具有 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

于 2010-05-18T10:51:08.780 回答
1

看看我的开源应用程序 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。

于 2008-10-25T17:32:05.193 回答
1

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

于 2008-10-25T17:45:35.947 回答
1

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

于 2008-12-08T14:04:19.767 回答
1

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

总而言之,我选择了 OpenPop.Net并推荐它!

最好的问候,JP

于 2011-02-25T14:54:13.290 回答
1

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

http://www.codeplex.com/mimeParser

于 2008-12-06T06:24:20.193 回答
1

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

您实际上只需要这些命令,也许还需要对附件进行一些 base64 解码。而已。

于 2008-10-25T13:19:48.180 回答
1

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

于 2008-10-25T13:23:26.533 回答
1

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

OpenPop.net 修改为包含 SSL 支持以访问 Gmail

于 2009-07-11T21:38:19.023 回答
0

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

于 2008-10-25T13:33:10.610 回答