我的任务是创建某种服务,将任何电子邮件发送到电子邮件地址并处理电子邮件的内容(包括二进制附件)。
我可以完全访问将运行此服务的服务器(Windows Server 2008),并决定使用.NET框架(3.5)对解决方案进行编码。
现在我正在思考我能做到这一点的不同方法。由于我在编程处理电子邮件方面不是很有经验,因此我的第一个解决方案就是创建一个电子邮件客户端,定期轮询现有的电子邮件服务器以获取传入的电子邮件(使用POP3协议) )并处理它们。但还有其他方法可以做到。
可以使用IMAP保持与邮件服务器的连接并在邮件到达时立即获取电子邮件(响应速度更快,但我相信IMAP协议更难实现。)这里的后续问题是:哪里可以找到支持POP3或IMAP协议的可靠电子邮件库?
另一个可能是以某种方式配置电子邮件服务器直接将发送到特定地址的电子邮件传输到我的二进制代码(我已经看到这在Linux服务器上完成。)我不知道如何去做不过这是。
我能想到的最后一点就是在自己的地址上创建一个虚拟电子邮件服务器,当它到达时直接处理电子邮件,但对我来说这似乎是一个坏主意。
有没有人有这方面的经验?我认为必须为票证支持系统编写电子邮件处理程序并不罕见,除此之外我还需要处理附件。
我很感激任何提示和技巧。
答案 0 :(得分:2)
与很多事情一样 - 这取决于。问自己以下问题:
您的延迟要求是什么?您是否需要尽快处理传入的消息,还是可以对处理进行批处理?如果可以批量处理,那么您需要多久处理一次“收件箱”?
您的吞吐量要求是多少?我们每分钟在谈论多少条消息?消息有多大?如果使用批处理方案,这将影响您对轮询间隔的决定;
您正在整合什么样的电子邮件系统?如果是Exchange,可以使用哪些编程接口来访问邮箱?在最新版本的Exchange之前,有趣的是,访问Exchange服务器上的邮箱存在问题(需要使用的客户端CDO COM组件并不理想 - 并且存在安全限制)。
到目前为止,最简单的方法是使用POP3轮询邮箱。但是,如果您需要立即响应传入消息,那么这不会削减它。
尽可能避免编写自己的SMTP服务 - 之前已经完成了一千次,而您只是为自己创建了不必要的工作并让自己面临安全威胁。如果您必须立即响应消息,请设置Sendmail或Postfix的实例以生成您已编写的流程。
如果您打算使用POP3解决方案(看起来像是这样),请阅读相关问题“Free POP3 .NET library?”和“Reading Email using POP3 in C#”。
答案 1 :(得分:0)
我过去使用过webdav和c#定期访问交换服务器并处理电子邮件。
这非常有效,如果我需要的话,我可能会再次使用该方法。
答案 2 :(得分:0)
http://www.quiksoft.com/中的某些.net组件可能会对您的要求有所帮助。
应用程序每隔x分钟轮询一次POP3邮件服务器,然后通过队列中的邮件进行处理,并在处理每个邮件时删除它们。
QuikSoft工具还提供了解析电子邮件以获取每个消息的内容的方法。
答案 3 :(得分:0)
接收电子邮件并不是最困难的部分,解析,提取附件是。
如果有人对商业产品感兴趣,请查看Mail.dll。 它支持您为instant notifications提到的IDLE命令。
Mail.dll包含 POP3 , IMAP 客户端和强大的MIME解析器:
using(Imap imap = new Imap())
{
imap.Connect("imap.server.com");
imap.Login("user", "password");
imap.SelectInbox();
List<long> 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);
}
请注意,这是我创建的商业产品。
下载