有什么方法可以让.NET代码在到达时运行并处理电子邮件?

我的任务是创建某种服务,将任何电子邮件发送到电子邮件地址并处理电子邮件的内容(包括二进制附件)。

我已经完全访问将运行此服务的服务器(Windows Server 2008),并决定使用.NET框架(3.5)对解决方案进行编码。

现在我正在思考我能做到这一点的不同方式。 由于我在编程方式处理电子邮件方面不是很有经验,因此我的第一个解决方案就是创建一个电子邮件客户端,定期轮询现有的电子邮件服务器以获取传入的电子邮件(使用POP3协议) )并处理它们。 但还有其他方法可以做到这一点。

一个可能是使用IMAP保持连接到邮件服务器并在它们到达时立即获取电子邮件(反应更快,但我相信IMAP协议更难实现。)这里的后续问题是:我在哪里可以找到支持POP3或IMAP协议的可靠电子邮件库?

另一个可能是以某种方式配置电子邮件服务器直接管理发送到我的二进制代码的特定地址的电子邮件(我已经看到这在Linux服务器上完成。)我不知道如何去做这个,虽然。

我能想到的最后一点就是在它自己的地址上创建一个虚拟电子邮件服务器,当它到达时直接处理电子邮件,但对我来说这似乎是一个坏主意。

有没有人有这方面的经验? 我认为必须为票证支持系统编写电子邮件处理程序并不罕见,除此之外我还需要处理附件。

我会感激任何提示和技巧。

与很多事情一样 – 这取决于。 问自己以下问题:

  1. 您的延迟要求是什么 – 您是否需要尽快处理传入的消息,还是可以对处理进行批处理? 如果可以批量处理,那么您需要多久处理一次“收件箱”?

  2. 您的吞吐量要求是多少? 我们每分钟在谈论多少条消息? 消息有多大? 如果使用批处理方案,这将影响您对轮询间隔的决策;

  3. 你正在整合什么样的电子邮件系统? 如果是Exchange,可以使用哪些编程接口来访问邮箱? 直到最新版本的Exchange,有趣的是,访问Exchange服务器上的邮箱存在问题(需要使用的客户端CDO COM组件并不理想 – 并且存在安全限制)。

到目前为止,最简单的方法是使用POP3轮询邮箱。 但是,如果您需要立即响应传入的消息,那么这不会削减它。

尽可能避免编写自己的SMTP服务 – 它之前已经完成了一千次,而你只是为自己创造了不必要的工作并让自己面临安全威胁。 如果您必须立即响应消息,那么请设置Sendmail或Postfix的实例以生成您编写的进程。

如果您打算使用POP3解决方案(它看起来像你),那么请阅读相关问题“ 免费POP3 .NET库? ”和“ 在C#中使用POP3阅读电子邮件 ”。

我过去使用过webdav和c#定期访问交换服务器并处理电子邮件。

这非常有效,如果我需要,我可能会再次使用该方法。

来自http://www.quiksoft.com/的一些.net组件可能有助于满足您的要求。

该应用程序每x分钟轮询一次POP3邮件服务器,并通过队列中的消息进行处理,并在处理每个消息时删除它们。

QuikSoft工具还提供了解析电子邮件以获取每个消息的内容的方法。

接收电子邮件并不是最困难的部分,解析,提取附件是。

如果任何人对商业产品感兴趣,请看一下Mail.dll。 它支持您提到的用于即时通知的 IDLE命令。

Mail.dll包括POP3IMAP客户端和强大的MIME解析器:

using(Imap imap = new Imap()) { imap.Connect("imap.server.com"); imap.Login("user", "password"); imap.SelectInbox(); List uidList = imap.SearchFlag(Flag.Unseen); foreach (long uid in uidList) { IMail mail = new MailBuilder() .CreateFromEml(imap.GetMessageByUID(uid)); Console.WriteLine(mail.Subject); } imap.Close(true); } 

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

您可以在http://www.lesnikowski.com/mail下载它