The Serverside .Net上有一篇介绍如何用.NET技术构建邮件服务器的文章,值得一读。记得自己原来写过的那个SMailer(C++ Wrapped Classes For Mail Sending),所以看到这篇文章就觉得很亲切,不少内容当时我都有所涉及,只是所用技术不同而已。
轻松驾驭Socket — 一个简单的.NET电子邮件服务器(Riding on Sockets - A Simple .NET Email Server)
归纳一下,该文有如下三个特点:
-关于SMTP协议的简单介绍,比较完整,比起看RFC文档来要容易多了(当然SMTP本身也不甚复杂)。
-使用.NET Framework进行Socket编程的基本常识,包括所用到的类以及工作流程。
-构建Email Server的一个通用解决方案。结构清晰的设计同样可以拓展到其他基于Socket的应用。
Introduction Sometimes, it's necessary to remember the roots, the place where it all began. The World Wide Web and electronic mail have become very common to our life, and it's our duty to tell the story behind their creation to our children and grandchildren. More importantly, as the importance of a technology increases, so does its usage--and thus the need that we'll need to understand what's happening at the protocol level in order to debug and/or diagnose problems. To do that, we need to understand how to work with sockets at the most primitive level, and to speak and understand the SMTP and HTTP protocols "in the raw". Fortunately, Internet protocols aren't all that hard to understand. As I took a closer look at SMTP and HTTP for the first time, I was surprised how simple they are.
You might be a bit scared of such low-level exploration. Maybe you know the Z39.50 protocol, which often is used by libraries to offer an interface for searching their inventory of books and articles. This protocol is very tricky and almost completely incomprehensible. However, internet protocols are deliberately written to be human readable, making it relatively easy to know their basics. The .NET Framework is a very good friend to explore the mysteries of these socket based protocols. Going through an email server sample will address both sides: SMTP basics and .NET Framework programming.
The following email server will be able to handle multiple connections for receiving emails. In order to keep it simple, only a subset of SMTP commands will be implemented, but it’s easy to extend and finish the software.
全文见:http://www.theserverside.net/articles/showarticle.tss?id=SocketProgramming