c# - 有什么方法可以让 .NET 代码在电子邮件到达时运行和处理它们?

标签 c# .net email

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

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

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

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

另一种可能是以某种方式配置电子邮件服务器,以将发送到特定地址的电子邮件直接通过管道传输到我的二进制代码(我已经在 Linux 服务器上看到过这样做。)我不知道该怎么做不过,这个。

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

有人有这方面的经验吗?我可以想象,必须为票务支持系统编写电子邮件处理程序并不少见,除此之外我需要的只是处理附件。

如果有任何提示和提示,我将不胜感激。

最佳答案

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

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

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

  3. 您要集成哪种电子邮件系统?如果是 Exchange,可以使用哪些编程接口(interface)来访问邮箱?有趣的是,在 Exchange 的最新版本之前,访问 Exchange 服务器上的邮箱存在问题(需要使用客户端 CDO COM 组件,这并不理想——并且存在安全限制)。

到目前为止,最简单的方法是使用 POP3 轮询邮箱。但是,如果您需要立即回复收到的消息,那么这并不能解决问题。

尽可能避免编写您自己的 SMTP 服务——以前已经做过一千次了,您只是在为自己创造不必要的工作,并将自己暴露在安全威胁之下。如果您绝对必须立即回复消息,那么最好设置一个 Sendmail 的实例。或 Postfix生成您编写的进程。

如果您打算使用 POP3 解决方案(看起来您是),请阅读相关问题“Free POP3 .NET library?”和“Reading Email using POP3 in C#”。

关于c# - 有什么方法可以让 .NET 代码在电子邮件到达时运行和处理它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1243557/

相关文章:

c# - ORM架构

android - 使用 GMail 发送带有 EXTRA_STREAM 的电子邮件 Intent 会崩溃

r - 从 R 发送电子邮件 - 当 Windows 中的计划脚本失败时

r - 将针织临时文件附加到 R Shiny 的电子邮件

c# - 当 Stream.CanSeek 为 false 时我为什么要这样做

.net - 迁移存储在 RavenDB 中的数据

c# - 有没有办法确定 Convert.ToDateTime 是否添加了年份?

c# - 无法进入.NET源代码

c# - 没有给出与 'id' 所需的形参 'Human.Human(int, string, string, string)' 相对应的参数

c# - 包含最小值和最大值的 RNGCryptoServiceProvider