邮件服务器基本原理讲解

        我想很多的人都发过电子邮件,只要我们有一个邮件客户端,然后填上收件人地址,发信人地址,发信的内容等等就可以发送一封电子邮件了。当然我们现实生活中感觉到的电子邮件的传输可能很简单,但是在其背后的实现机制却非常的复杂。而且,由于早期技术的限制,要实现一个完整的邮件系统,需要的服务器可能需要达到多种,因此,这种方式建立的邮件服务器是非常繁琐且不易维护的。后来人们为了方便,于是九江许多的功能集成在某一个软件上,这样只需要安装这样一个软件,就可以实现许多邮件服务功能。这样维护起来也方便多了。

 

在讲邮件服务器之前,我们先介绍几种服务器常用的组件概念:

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张图片

               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服务器的工作原理

 

好了,介绍这么多,一个完成的邮件服务器的工作原理以及功能大概就是这样子了。