全部博文(37)
2010年(37)
分类:
2010-03-18 19:41:30
什么是MUA(MailUser Agent):邮件使用者代理人。主要功能就是接收邮件主机的电子邮件,以及提供使用者浏览与编写软件的功能。
例如:Outlook,Kmail,Netscape中的mail功能。
MTA(Mail Transfer Agent):MUA是用在Client端上面的软件,那么这个MTA就是用在邮件服务器上的软件。MTA就是邮件传输代理人的意思。主要功能:
1:接收外部主机寄来的邮件。
2:帮助使用者寄出信件。
3:可以使使用者收到自己的信件。
MDA(Mail Delivery Agent):邮件输送代理人。主要的功能就是将MTA所收受的信件,依照信件的流向来将该邮件放置到本机帐户下的邮件档案中(Mailbox),或是经过MTA将这个邮件放到下个MTA去!此外它还可以实现邮件的过滤功能。
Mailbox:信箱。此目录在/var/spool/mail/下,每个帐号都有一个自己的信箱
具体过程如下:
使用者利用MUA(outlook express)寄信到MTA上面。此步定义了发信人与发信站点,收信人与收信站点。
如果收到自己的信件,交给MDA发送到该帐号的Mailbox中。
如果不是发给自己的信件,那就把信件转发出去。
远端MTA收到信件发现是给自己的,那就交给他的MDA去处理了。
当邮件服务器程序得到一封待发送的邮件时,它首先需要根据目标地址确定将邮件投递到哪一个邮件服务器,这就是通过DNS服务实现的。
在DNS数据库中有一条很重要的纪录,就是MX纪录。MX纪录用于告知MTA将邮件传递到何处。纪录中包含了出现在电子邮件地址中的主机名。
当邮件向目的地传输时,一旦源地址和目的地地址都不是本地系统,就会发生中继。
例如:收到发给的信件,那就会把信件转发给。这就是中继。
如果你开启了中继,默认情况下任何人都可以使用你的MTA来发信,这样你的MTA将会变得很忙,很笨重。
Sendmail预设情况下只中继localhost(127.0.0.1)
那需要中继的时候怎么办?幸好有SMTP邮件认证机制,也就是传说中的relay。
如果你开启了中继,默认情况下任何人都可以使用你的MTA来发信,这样你的MTA将会变得很忙,很笨重。
Sendmail预设情况下只中继localhost(127.0.0.1)
那需要中继的时候怎么办?幸好有SMTP邮件认证机制,呵呵。
与电子邮件相关的协议:
1.SMTP(Simple Mail Transfer Protocol)
简单邮件传输协议
主要规定基础的电子邮件提交系统怎么传递报文。
在整个电子邮件系统中,有两处需要使用SMTP
1)发送邮件的MUA与MTA建立连接并发送邮件。
2)MTA之间也使用SMTP进行电子邮件的转换。
2.MIME(Multipurpose Internet Mail Extension)
多用途互联网邮件扩充
最初的因特网电子邮件系统被设计为只能处理文本。
为了帮助协调和统一为发送二进制数据而发明的多种编码方案,IETF发明了MIME。它并不指定一种二进制数据的编码标准,而是允许发送方和接收方选择方便的编码方法。在使用MIME时,发送方在头部包含一些附加行说明信息遵循格式,以及在主体中增加一些附加行说明数据类型和编码。
除了在发送方和接收方之间提供一致的编码方式外,MIME还允许发送方将信息分成几个部分,并对每个部分指定不同的编码方法。这样,用户就可以在同一个信息中既发送普通文本有附加一个图形等了。当接收者查看消息时,电子邮件系统显示出文本消息,然后询问用户如何处理附加的图形(打开,还是保存到磁盘)。
当用户决定了如何处理附件时,MIME软件自动解码附加的数据。
3.POP3(Post Office Protocol)
邮局协议
POP协议要检测用户的登录名和口令,然后将用户的邮件从服务器移动到用户本地系统的MUA中。
IMAP是POP的替代品。
用户不用记忆POP命令和IMAP命令。
下面我们就来了解一下sendmail:
相关软件包:
[root@uplooking ~]# rpm -q sendmail
sendmail-8.13.8-2.el5
其主配置文件:
[root@uplooking mail]# pwd
/etc/mail
[root@uplooking mail]# ls
............sendmail.cf...............
............sendmail.mc...............
sendmail的主配置文件是sendmail.cf,但是该文件内容相当复杂,我们一般不直接对该文件进行修改,而是修改sendmail.mc文件,然后通过m4生成到sendmail.cf文件当中去,而local-host-names文件主要是用来当一台主机同时拥有多个主机名称的时候收发信件主机名称的问题,文件access.db规定了谁可以或者不可以使用本地邮件系统的资料库,要转换这个资料库需要makemap这个命令,以及/etc/mail/access文件,/etc/mail/aliases.db或是/etc/aliases.db这两个文件时信箱别名文件,可以借助这个档案的设定来规范的群组收信,当然这里需要借助aliases及newaliases来设定。
/usr/sbin/sendmai这个文件时sendmail的主要执行文件了,它会读取sendmail.cf这个文件的设定内容,就是用该执行文件来启动25端口的。
/usr/sbin/makemap该执行文件主要将access转换成access.db的资料库的。
/usr/sbin/mailstats该文件可以查看到目前为止sendmail的工作情况。
/usr/bin/newaliases该文件主要是将/etc/mail/aliases转换成/etc/mail/aliases.db
/usr/bin/mailq该文件是用来观察/var/spool/mqueue这个邮件暂存目录的资料情况。
/usr/bin/m4该文件是用来把*.mc转换成*.cf文件的。
邮件相关目录:
/var/spool/mail该目录用来存放每个系统用户邮件的
/var/spool/mqueue由于某些原因,邮件暂时发布出去,那么该邮件就会暂时的存放在这个目录下,同时每30-60分钟尝试传输一次,通常设定5天该封信还寄不出去,那就退信了!
相关工具:
[root@uplooking ~]# rpm -q m4
m4-1.4.5-3.el5.1
m4:该工具是用来转换sendmail配置文件的程序
[root@uplooking ~]# rpm -q mailx
mailx-8.1.1-44.2.2
mailx是用来提供最简的mail这个寄信与收信的套件
[root@uplooking mail]# pwd
/etc/mail
[root@uplooking mail]# cat sendmail.mc | grep use_cw_file
FEATURE(use_cw_file)dnl
此项设置会使sendmail读取/etc/mail/local-host-names文件的内容,将这个文件中的所有内容均视为本地主机名。
编辑/etc/mail/local-host-names
#vi/etc/mail/local-host-names
添加如下记录
chunhui.linux.com
linux.org
重起服务器
使用access数据库
我们再来看默认的sendmail.mc文件
100 FEATURE(local_procmail, `', `procmail -t -Y -a $h -d $u' )dnl
101 FEATURE(`access_db', `hash -T
FEATURE('blacklist_recipients')dnl
EXPOSED_USER(`root')dnl
看第101行:这一行会使sendmail读取/etc/mail/access.db文件的内容。
/etc/mail/access.db是一个散列表数据库,它是用/etc/mail/access产生出来的。/etc/mail/access文件是纯文本文件,其格式如下:
[root@uplooking mail]# cat access
Connect:localhost.localdomail RELAY
Connect:localhost RELAY
Connect:127.0.0.1 RELAY
其配置的具体方法有:
地址格式:
操作参数:
修改/etc/mail/access
#vi/etc/mail/access
添加下面行
linux.org RELAY
192.168.1 RELAY
使用makemap命令生成/etc/mail/access.db
#cd /etc/mail
#make hash access.db < access
现在就能在test.linux.org内收发信件了。
收发邮件测试(利用主机名与域名发信)
将DNS客户指向此网段内的DNS服务器
标题为test1
标题为test2
以test用户登录
$mail
应该能看到test1,test2两封信见了。
使用aliases数据库
配置文件中的
define(`ALIAS_FILE`,`/etc/aliases`)dnl
所以sendmail的别名被定义在/etc/aliases文件中。
编辑aliases文件
#vi/etc/aliases
test: test1,test2,test3,test4,test5@163.com
这样在你给test用户发信后,主机会将该信复制成4份分别寄给test1,test2,test3,test4,test5@163.com。
制作资料库/etc/aliases.db
#newaliases
通过M4重新生成cf配置文件
有的时候配置数据库无法满足管理员的配置要求时,就需要编辑mc宏配置文件然后生成cf配置文件。
smtp本省不具有身份认证能力。
现在我们用的sendmail可以通过搭配cyrussasl身份认证程序库,即可达到往日商业软件才有的身份认证功能。
查看所需要的软件包是否已经安装:
[root@uplooking ~]# rpm -qa | grep sasl
cyrus-sasl.........
cyrus-sasl-devel.......
cyrus-sasl-lib.....
cyrus-sasl-plain.....
cyrus-sasl-md5....
#rpm -qa | grep sasl
cyrus-sasl-md5
cyrus-sasl
cyrus-sasl-plain
查看sendmail与认证相关的配置
#cat /usr/lib/sasl/sendmail.conf
pwcheck_method:pam
编辑sendmail.mc
#visendmail.mc
修改和认证相关的配置行(删除每行开始的dnl)
TRUST_AUTH_MECH(*)dnl
define(`confAUTH_MECHANISMS`,`*`)dnl
修改本地MTA的IP地址
DAEMON_OPTIONS(`Port=smtp,Addr=192.168.1.1,Name=MTA`)dnl
生成cf文件
#m4sendmail.mc > sendmail.cf
重新启动sendmail
#service sendmail restart
修改sendmail.cf,将
#O MaxMessageSize=1000000
前的注释“#”去掉,并修改限制邮件的最大值,以字节为单位,默认为1G。
重新启动之后就能生效了。
由于某些原因信件无法发出,预设会存放在/var/spool/mqueue当中!
在/var/spool/mqueue当中的信件会每隔60分钟由sendmail尝试重新传送一次!可以修改/etc/sysconfig/sendmail里面的[QUEUE=时间]来修改,如果要30分钟尝试发送一次就把[QUEUE=1h]改成[QUEUE=30m]就可以了。
输入mailq就可以查看这些邮件队列的基本资料!
#mailq
Q-ID:表示对此封邮件队列的代号(ID);
Size:这封信有多大容量(bytes)的意思;
Q-Time:这封信什么时候进入/var/spool/mqueue这个目录的,并且说明无法立即传送出去的原因;
Sender/Recipient:送信与收信者的电子邮件地址。
mailstats命令记录sendmail由开始运作到目前为止,邮件的收发统计资料!
预设是/etc/mail/statistics这个文件。
#mailstats
M:只是一些邮件工作的代号标题了。那个T是总合的意思;
msgsfr:共有多少封信由这个邮件工作所发出去;
bytes_from:表示的是信件资料来源;
msgsto:收到的信件封数了;
bytes_to:表示的是信件资料的目的地;
msgsrej:reject了多少!
msgsdis:discard了多少!
Mailer:就是sendmail许多mailers当中的一个了,esmtp主要用来对外,至于local则主要针对本机的mailbox。