我想很多的人都发过电子邮件,只要我们有一个邮件客户端,然后填上收件人地址,发信人地址,发信的内容等等就可以发送一封电子邮件了。当然我们现实生活中感觉到的电子邮件的传输可能很简单,但是在其背后的实现机制却非常的复杂。而且,由于早期技术的限制,要实现一个完整的邮件系统,需要的服务器可能需要达到多种,因此,这种方式建立的邮件服务器是非常繁琐且不易维护的。后来人们为了方便,于是九江许多的功能集成在某一个软件上,这样只需要安装这样一个软件,就可以实现许多邮件服务功能。这样维护起来也方便多了。
在讲邮件服务器之前,我们先介绍几种服务器常用的组件概念:
MUA:Mail User Agent,邮件用户代理,它主要的功能就是接受邮件服务器上的电子邮件,以及提供用户浏览和编写邮件的功能。通俗的说就是一个邮件客户端。
常见的MUA软件有:
Outlook Express, Outlook
Foxmail
Thunderbird
Evolution
mutt(文本界面)
MDA:Mail Delivery Agent,邮件投递代理,它主要的功能就是分析MTA所收到的信件的表头和内容等数据,来决定这封邮件的去向。如果MTA所收到的这封信目标是自己,那么就会将这封信转到使用者的邮箱中去;如果不是,那么就中继(转递)出去。MDA其实是MTA下的一个小程序而已。
常见的MDA软件有:
procmail
maildrop
MTA:Mail Transfer Agent,邮件传输代理,它主要的作用是收取信件,接受邮件时使用的协议是SMTP(Simple Mail Transfer Protocol,简单邮件传输协议),监听的端口号是25。当然我们一般所说的Mail Server就是指的是MTA,其实MTA仅仅指的是SMTP协议而已。
常见的提供MTA功能的软件有:
比较老牌的sendmail
后起之秀postfix:这个软件采用模块化设计,且安全,跟sendmail兼容,且比他的效率高
qmail
Exchange(windows,异步消息协作平台)
当然我们后面所使用到的MTA软件就是postfix了。
MRA:Mail Retrieval Agent,邮件检索代理,使用者可以通过(POP3或者IMAP4)协议来收下自己的信件。当然POP3和IMAP4的收信方式是不同的,在这里我介绍一下他们两个的收信方式:
POP3的收信方式:
1、MUA(邮件客户端软件)透过POP3(Post Office Procotol Version 3,邮政服务协议)连接到MRA的110端口,并且MUA需要提供账号和密码来取得正确的授权。这个授权是由POP3协议到数据库中来检索账号和密码是否正确来取得授权的。因此MRA还需要和数据库结合一起来工作,这个在后续再讲到。
2、MRA确认账号和密码没有问题后,会前往用户的邮箱取得使用者的邮件,并传递给MUA软件。
3、当所有的信件传送完毕后,用户邮箱(mailbox)内的数据会被清空
IMAP4的收信方式:
首先也需要通过账号和密码来取得授权才可以取得使用者邮箱(mailbox)内的邮件,但是他不仅将取得的邮件返回给MUA,并且将邮件保存在~/使用者账号/目录下。这样一来,用户就可以永久查看邮件了。
因此,建立一个完整的邮件服务器只要需要SMTP和POP3洗协议才行。
常见的MRA有:
cyrus-imap
dovecot
接下来我们介绍一个完整的邮件服务器是如何工作的:
大概流程如下:
1、首先使用者利用MUA软件写好一封邮件,利用SMTP协议将其传到本地SMTP服务器(记住,这里是本地SMTP服务器,而不是目的端SMTP服务器,在这里我们将SMTP服务器简称SMTPD)
2、当MTA收到邮件后,如果该邮件的目的端是本地的话,那么MDA会将该邮件存放在使用者的邮箱里(mailbox);如果不是本地的话,需要调用smtp客户端(这里简称smtp)与目标MTA建立连接,MDA会将其转发给下一个MTA,如果是这种情况不加任何措施的话,那么所有的人只要连接到本地,都可以发送邮件了,且MDA都会为其转发给下一个MTA,我们将这种传递方式叫做开放式中继(open relay)。当然这种方式是不安全的,如果有人发送一些不健康的邮件或者不法邮件的话,那么导致以下几种不好的影响:
(1)、占用MTA网络带宽
(2)、被互联网定义为黑名单,因此,许多正常的邮件无法发出。
(3)、IP可能会被上级运营商给封锁掉等等不良因素
因此为了安全起见,需要使用者在使用MUA发送邮件之前,需要提供账号和密码取得授权,才可以发送邮件,这样MTA就只为这些经过授权的账号提供中继,就可以正常转发邮件了。当然验证账号和授权的功能需要用到SASL( Simple Authintication Secure Layer, 简单认证安全层)机制,SASL就是用来验证账号是否具有relay服务。当然它也是通过在数据库上面检索账号和密码是否正确来验证的。因此,它也需要和数据库一起结合使用。
3、本地SMTP服务器调用smtp客户端(smtp)与下一个smtp服务器建立tcp连接,然后目标smtp服务器收到邮件后,MDA会分析该邮件的表头和内容,决定这封信的去向。如果目标是本地,则将其转发到使用者的邮箱下;如果不是,继续向下一个MTA转发(之后的过程和这是一样的)。
4、客户端收取邮件,当然也需要通过账号和密码取得授权,通过与MRA建立连接,这里就使用pop3。pop3会到数据库检索账号和密码是否正确,如果账号和密码没有问题,就到使用者的邮箱下取得邮件,返回给pop3服务器,在由pop3服务器返回给客户端。
一般说来,我们发送邮件都会使用某个客户端软件来实现,但是我想也有人在web页面上发送过邮件吧,我们把这种邮件方式称作为webmail。这种方式就是将MUA软件嵌套在web服务器上面,然后再将web服务器和MTA连接起来,这就是webmail的工作原理。
常见的webmail有:
Openwebmail
squirrelmail
Extmail(Extman)
EMOS, CentOS
在后续的文章中,我们将介绍Extmail这种方式以及结合web服务器的工作原理
好了,介绍这么多,一个完成的邮件服务器的工作原理以及功能大概就是这样子了。
转载于:https://blog.51cto.com/xslwahaha/1560462