我们使用邮件一般是使用邮件客户端,比如,Thunderbird,Foxmail,Microsoft Outlook等等,使用的时候需要设置STMP发送服务器,POP3或者IMAP接收服务器这样给我们的印象似乎是STMP是发送协议,POP3或者IMAP是接收协议。
有一次我意外的发现有一个公司的邮件服务器居然只开放了STMP的25端口(STMP、POP3和IMAP的默认端口分别是25。、110和143),这让我很是费解。仔细想一下,邮件一端发送一端接收不应该是同一个协议吗?协议不同不可能一个发一个收啊。所以说STMP是发送用的POP3或者IMPA是接收用的,这里理解肯定是不对的。
于是仔细研究了一下。先看一下协议定义:
STMP:(Simple Mail Transfer Protocol, SMTP)简单邮件传输协议,是事实上的在Internet传输email的标准。SMTP是一个相对简单的基于文本的协议。在其之上指定了一条消息的一个或多个接收者(在大多数情况下被确认是存在的),然后消息文本会被传输。可以很简单地通过telnet程序来测试一个SMTP服务器。SMTP使用TCP端口25。要为一个给定的域名决定一个SMTP服务器,需要使用MX (Mail eXchange) DNS。
POP:(Post Office Protocol,簡稱POP)邮局协议。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件。
IMAP:(Internet Message Access Protocol)交互邮件访问协议,是一个应用层协议,用来从本地邮件客户端(如Microsoft Outlook、Outlook Express、Foxmail、Mozilla Thunderbird)访问远程服务器上的邮件。
上面定义可以看出,邮件协议其实就是STMP,POP和IMAP只不过是辅助协议,用来方便接收邮件用的。下面画了一额简单的关系图
从上图可以看出STMP实际上有两个角色,一个是接收用户发送邮件的请求。另一个是在邮件服务器之间投递邮件(发送和接收)。而POP或者IMAP的角色只有一个就是接收用户查询/查看收到的邮件。因此我们说POP/IMAP是一个附属品,理论上完全可以不用。只是因为接收邮件要比发送邮件要复杂,比如新收到的邮件,邮件归类、按时间排序等待,为了方便接收邮件才出来的应用层协议。
回到开头发现的那个奇怪的问题,即邮件服务器居然只开放了STMP的25端口,比如我查询的服务器IP的结果是
25/tcp open smtp netqmail smtpd 1.04
80/tcp open http Apache httpd 2.2.22 ((Ubuntu))
Service Info: OS: Unix
根据上面的分析,这个服务器只开启了15端口是完全可以的。也就是它是可以接收邮件的。只不过因为没有POP3活IMAP所以这个服务器上的邮件用户无法使用邮件客户端通过internet来接收邮件。通过检索netmail邮件服务器软件可以知道它内置了POP服务,那么服务器只是没有将POP的端口对外开放而已,那么可能对内是开放的,比如服务器所在的局域网内POP端口是开放的,那么在内网是可以接收邮件的,只是员工出差啊使用公网是不能接收邮件的。
总结一下邮件发送
当有客户端写好邮件,点击发送,则会将收件人,邮件标题,内容等信息发给了STMP服务器(Server1),服务器根据收件人地址比如[email protected]知道邮件服务器域名为163.com,通过DNS服务器找到域名163.com对应的MX记录,这样就找到了接收人的服务器(Server2)的IP,然后将邮件发送到Server2。接收邮件的人的邮件客户端通过POP3协议知道有一封新邮件到来了,标记一下,收件人看到后就可以通过POP协议将邮件内容取下来看了。
上面只是我根据查询到的资料的个人理解,难免有错误,欢迎指正!