分类:
2009-07-10 13:10:39
以前也配置过snedmail,但是从来没有写过文档,以前是用sendmail-8.12配置的,它的IMAp和pop3使用的是IMAP-2001,但是目前最稳定的版本是8.13,所以我这次也开始使用sendmail-8.13了。
我再介绍安装配置之前先说一下电子邮件系统的工作原理。
一、 电子邮件格式
RFC822()定义了邮件的标准格式,它将一封电子邮件分成信封和内容两个部分,邮件的信封包含了邮件的由发送端传递到目的端所需的信息,而内容通常是发送者要发送给接收者的报文实体。信封信息包含了发送者电子邮件地址、接收者电子邮件地址以及投递模式。这些信息确定了邮件传送给接收者的信箱,邮件内容可以分为报头和报文两个部分,报头的邮件格式所规定的也是必要的部分,发送端 MUA自动在邮件顶部添加报头而无需用户手动输入信息。接收端MUA收到邮件后,重新格式化报头信息或者完全删除报头信息以利于接收者阅览邮件,以下是电子邮件格式。
一、 电子邮件系统的组成
整个电子邮件系统主要由两大部分构成:
电子邮局系统
电子邮件发送、接收系统。
在电子邮件的术语中,将电子邮件的发送、接收传统系统称为MUA。
⑴ MUA
当邮件写好之后,应该使用邮件用户代理(Mail User Agent,MUA)程序将邮件发往Internet上的一个ISP(它运行着邮件服务器程序)。MUA是一个邮件系统的客户端程序,它提供了阅读、发送和接收电子邮件的用户接口。MUA也是用户和MTA之间的接口,当用户发邮件时,MUA使用SMTP协议将用户信件以“上推”方式提交给MTA;当用户接收邮件时,使用POP或IMAP协议将用户邮件从目标MTA处以“下拉”方式传送给MUA。供用户阅读。MUA是邮件系统中与用户交互较多的部分。一个好的MUA将向用户隐藏整个邮件系统的复杂性。
MUA至少具有如下的3个功能“
① 撰写邮件:提供给用户方便的信件编辑环境。
② 显示邮件:方便用户阅读信件。
③ 处理邮件:提供处理邮件的能力,如删除、存盘、打印、转发、整理等。
⑵ MTA
电子邮件的传送要依靠邮件传输代理(Mail Transfer Agent.MTA)来完成。作为邮件的服务器端程序,它负责邮件的存储和转发(Store and Forward)。MTA监视用户代理的请求,根据电子邮件的目标地址找出对应的邮件服务器,将信件在服务器之间传输并且将接收到的邮件进行缓冲。MTA根据接收者的地址来选择邮件应该送往的下一个主机。这个主机可能是目标主机,也可能是中间机(邮件网关,中继)。
MTA应该具有如下的职责:
① 接收和传递由客户端发送的邮件。
② 维护邮件队列。以便客户端不必一直等到邮件真正发送出去。
③ 接收客户的邮件,并将邮件放置在缓冲区存储,知道用户连接从而收取邮件。
④ 有选择的转发和拒绝转发接收到的、目的地为另一个主机的信息。
⑶ 电子邮件系统的工作原理
在电子邮件系统中,为了保存用户提交的电子邮件,电子邮件系统使用了所谓假脱机(spooling)的缓存技术。当用户将电子邮件提交给系统后,邮件系统将一个邮件的副本连同发送者的标志、接收者的标志、目的机器和投递时间一起放置在与MUA交互的MTA的专用的缓冲区内。然后发送者可以去执行别的任务,而电子邮件系统则把传送邮件到远端目标主机的工作放在后台进行。以下是流程图:
在MTA上运行的后台邮件传送进程将目标主机名映射为IP地址,并试图去建立一条到达目标MTA的TCP连接。如果成功的建立了连接,则后台的传送进程就把电子邮件拷贝传递给远程的MTA,远程的MTA上运行的后台邮件传送进程再把此邮件的拷贝放到
其上的专用缓冲区内(也称之为假脱机区域),一旦发送进程和接收进程都认为该电子邮件已被接收和存储,则发送进程将删除本地缓冲区内的待发送邮件的拷贝,如果后台的传递进程不能建立TCP连接,或者连接失败了,则传递进程将记录它尝试提交和此次提交尝试结束的时间。后台传递进程将定期扫描整个专用缓冲区,检查是否有尚未发出的电子邮件,当它发现存在尚未发出的电子邮件或由用户投递了新的电子邮件时(包括上次发送失败的电子邮件),它就再一次尝试提交发送。如果电子邮件系统经过了一段时间后(比如3天)发现某个电子邮件还发送不出去,则系统将会将邮件退还给发送者,这也就是电子邮件的客户会收到退信的原因。
⑷ 邮件中继
当邮件向目的地址传输时,一旦源地址和目的地址都不是本地系统,就会发生中继。例如:名位mail2,91xianbing.com的服务器收到mail.91xianbing.com的邮件,的,那么mail2.91xianbing.com得到此邮件后又将邮件发送给163.com域的主邮件交换服务器。此时mail2.91xianbing.com就起到了中继的作用。
一、 有电子邮件相关协议
⑴ SMTP
电子邮件在Internet上传送依赖于SMTP(Simple Message Transfer Protocol,SMTP),SMTP由RFC821定义,SMTP主要规定基础的电子邮件提交系统怎么传递报文,对于电子邮件系统怎么从用户接收电子邮件,用户接口怎么给用户显示接到的电子邮件,电子邮件如何存储以及电子邮件系统以怎样的频度发送报文等问题没有做出规定。
在整个电子邮件系统中,有两出需要使用SMTP:
① 发送邮件的MUA与MTA建立连接并发送邮件
② MTA之间也使用SMTP进行电子邮件的转发。
SMTP使用TCP的25端口,在发送的电子邮件数据流中既包含邮件内容,同时也包含了SMTP协议指令。下面列出基本的SMTP指令:
命 令 |
功 能 |
HELO |
打开SMTP会话并标识源主机 |
MAIL FROM |
指明发件人邮件地址 |
RCPT |
指明收件人邮件地址 |
DATA |
标志邮件内容的开始(以单行的英文句号“.”标识结束) |
RSET |
废弃一个邮件消息 |
VRFY |
验证电子邮件地址的有效性 |
EXPN |
确认邮件发送清单并返回清单的成员 |
HELP |
显示所有命令和命令说明 |
NOOP |
让目的主机返回OK响应 |
QUIT |
请求中断连接 |
SMTP的通信过程如下;
1) 客户端通过3次握手与服务器(通常是TCP25端口)建立一个TCP连接,然后等待服务器发送220 READY FOR MAIL.
2) 客户端在接收到220报文后,发送HELO命令。
3) 服务器以250 please to meet you 响应,表示一切正常
4) 客户端以MAIL命令开始电子邮件的交互,在MAIL命令中,有一个“From:”字段,用于在出错时通知发信人。
5) 服务器收到MAIL命令后,发送250 OK作为响应,表示一切正常。
6) MAIL命令成功后,客户端就可以将收信人的地址告诉服务器,这是用一连串的RCPT命令实现的。
7) 服务器收到每个RCPT命令后,发送250 OK作为响应,表示正确接收;或者发送550 No such user here作为响应,表示此处没有这个用户。
8) 客户端的RCPT命令得到正确的响应后,就可以用DATA命令发送数据。
9) 服务器接收到DATA命令后,发送354 Start mail inpit; end with “.” On a line by itself给予响应。
10) 客户此时可以输入信件的内容,并以单行的句号作为结束。
11) 服务器发送250 OK表示信息发送成功。
12) 客护端请求断开连接。
13) 服务器断开连接。
⑵ POP3
POP协议要检测用户的登陆名和口令,然后将用户的邮件从服务器上移动到用户本地桌面系统的MUA中,当前使用的POP协议的版本是POP3,它监听TCP的110端口,POP3协议在TFC1939中定义,它是请求---响应式协议,由客户端发送命令,服务器进行响应。以下是POP3的命令表。
命 令 |
功 能 |
USER username |
用户登录名 |
PASS password |
登录口令 |
STAT |
查询还未读取的消息/字节 |
RETR msg |
检索编号为msg的消息 |
DELE msg |
删除编号为msg的消息 |
LAST |
查询上次访问的邮件数量 |
LIST [msg] |
查询msg或所有消息的大小 |
REST |
删除所有的邮件,将邮件编号设置1 |
TOP msg n |
打印msg邮件的头和前n行 |
NOOP |
向远程服务器请求OK响应 |
APOP mailbox string |
标识一个邮件箱,并提供MD5认证字符串。可以作为USER/PASS命令的替代命令 |
UIDL [msg] |
查询指定邮件的唯一标识,或者列出所有邮件的标识 |
QUIT |
结束POP3会话 |
⑶ IMAP4
IMAP是POP3的替代品,它除了提供与POP相同的基本功能之外,还增加了对邮箱同步的支持,即IMAP提供了如何远程维护服务器上的邮件箱的功能。当前使用的IMAP协议的版本是IMAP4,它监听TCP的143端口,IMAP4协议在RFC2060中定义,它也是请求---响应式协议。由客户端想服务器发送命令,服务器进行响应。下面是IMAP4的命令表:
命 令 |
功 能 |
CAPABILITY |
列出服务器支持的功能 |
NOOP |
字面上理解是“没有操作”,但有时用语查询新消息和信息转状态更新 |
LOGOUT |
关闭连接 |
AUTHENTICATE |
请求可选的授权方式 |
LOGIN |
打开连接,以明文凡是输入用户名、密码进行登陆 |
SELECT |
打开一个邮件箱 |
EXAMINE |
以只读的方式打开邮件箱 |
CREATE |
创建一个新邮件箱 |
DELETE |
删除一个新邮件箱 |
RENAME |
重命名邮件箱 |
SUBSCRIBE |
将邮件箱添加到活动邮件箱程序清单中 |
UNSUBSCRIBE |
从活动邮件箱程序清单中删除一个邮件箱 |
LIST |
从所有有效的邮件箱名中显示出被请求的邮件箱名 |
LSUB |
从所有活动的邮件箱名中显示出被请求的邮件箱名 |
STATUS |
查询邮件箱的状态 |
APPEND |
想指定的邮件箱中增加消息 |
CHECK |
为当前邮件箱增加一个检查点 |
CLOSE |
关闭邮件箱,并删除所有有删除标记的消息 |
EXPUNGE |
删除当前邮件箱中所有有删除标记的消息 |
SEARCH |
显示符合搜索条件的消息 |
FETCH |
从邮件箱中取邮件 |
STORE |
修改邮件箱中的邮件 |
COPY |
将指定的邮件复制到指定邮件箱的末尾 |
UID |
按照消息标识符搜索或提取邮件 |
当用户在客户机上使用MUA接收信件时,MUA会使用POP命令或IMAP命令与MTA进行沟通,不必记忆POP命令和IMAP命令。
纲要:
1、 DNS的配置
2、 相关配置文件介绍
3、 具体的配置
4、 Outlook测试邮件收发正常
5、 Webmail的支持(openwebmail和squirrelmail)
一、 DNS的配置
Dns已经设置好,测试一下就可以了。
Nslookup
Mail2.91xianbing.com
Server: gjjline.bta.net.cn
Address: 202.106.0.20
Non-authoritative answer:
Name: mail2.91xianbing.com
Address: 60.28.200.82
OK!出现以上的说明你的DNS配置正确已经可以使用这个域名了。
二、 sendmail 相关安装配置介绍
.相关配置文件及功能:
/etc/mail/access sendmail 访问数据库文件
/etc/mail/aliases 邮箱别名
/etc/mail/local-host-names sendmail 接收邮件主机列表
/etc/mail/mailer.conf 邮寄配置程序
/etc/mail/mailertable 邮件分发列表
/etc/mail/sendmail.cf sendmail的主配置文件
/etc/mail/virtusertable 虚拟用户和域列表
2..相关软件包
# rpm -qa|grep sendmail
sendmail-
sendmail-cf-8.13.1-3.RHEL4.5
sendmail-devel-8.13.1-2
# rpm -qa|grep dovecot
dovecot-0.99.11-4.EL4
三,Sendmail具体配置
1.添加邮件虚拟主机虚名:
#cd /etc/mail
# vi local-host-names ,在里面添加邮件虚拟主机
91xianbing.com
mail2.91xianbing.com
2.打开SMTP发信认证
#vi /etc/mail/sendmail.mc
dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
将其改为如下:
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
DAEMON_OPTIONS(`Port=smtp,Addr=
地址改为自己机器的IP地址,如果是两块网卡,想都可以发信,那还是使用127.0.0.1这个地址。重启sendmail
然后用m4重新生成sendmail.cf
#m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
3.安装IMAP和POP3
[root@localhost mail]# rpm -qa|grep dovecot
dovecot-0.99.11-4.EL4
(RHEL3,imap:RHEL4 dovecot)
#vi /etc/dovecot.conf
protocols = pop3 pop3s imap imaps
如果不想接收信件,可以去掉pop3和pop3s
#service dovecot restart
#service sendmail restart
在使用用dovecot之前的版本,所有的pop3和imap都使用imap
4.查看端口是否正常:
#netstat –utl
tcp 0 0 *:imaps *:* LISTEN
tcp 0 0 *:pop3s *:* LISTEN
tcp 0 0 *:pop3 *:* LISTEN
tcp 0 0 *:imap *:* LISTEN
5.安全认证组件:
[root@localhost ~]# rpm -qa|grep sasl
cyrus-sasl-md5-
cyrus-sasl-plain-2.1.19-5.EL4
cyrus-sasl-gssapi-2.1.19-5.EL4
cyrus-sasl-ntlm-2.1.19-5.EL4
cyrus-sasl-sql-2.1.19-5.EL4
cyrus-sasl-2.1.19-5.EL4
cyrus-sasl-devel-2.1.19-5.EL4
#servcie saslauthd start //启动安全认证
6.创建邮件别名
别名是snedmail最重要的功能之一,它的使用虽然简单,单却发挥强大的功能,在mc配置①文件中有如下的设置:
Define(‘ALIAS_FILE’,/etc/aliases’)dnl;
Aliases是一个文本文件,其中的每一行格式如下:
Alias: recipient [,recipient,…]
<地址> <操作>
例如为单用户指定绰号。
Freyson:dafu
系统的登陆帐户设置为dafu。而对外的电子邮件帐号是freyson,这样可以更好来保护登陆帐号。
使用方法:
②转发邮件。例如,主机mail.xxx.com上的用户abc到了另外一家公司,,那么远公司的系统管理员可在别名文件中加入:
Abc:
自动
③别名数据库除了alias还可以使用user数据库
User数据库的功能比aliases数据库的强大,user数据库除了和aliases数据库一样可以改写入站地址之外,user数据库还可以改写出站地址。默认配置文件在mc下。
Define(‘confUSERDB_SPEC’,’/etc/mail/userdb.db’)dnl
此项设置会使sendmail读取/etc/mail/userdb.db文件的内容,对入站地址和出站地址进行改写。/etc/mail/userdb.db是一个散列表数据库,它是用/etc/mail/userdb.db产生出来的。/etc/mail/userdb是纯文本文件,其每一行的格式如下“
<入站地址>:maildrop <被改写的入站地址>
<出站地址>:mailname <被改写的出站地址>
使用方法:makemap btree userdb.db < userdb
① 使用虚拟用户数据库
虚拟域功能的实现,在mc文件配置如下:
FEATUREC(‘virtusertable’,’hash –o /etc/mail/virtusertable.db’)dnl
此项设置会使sendmail读取/etc/mail/virtusertable.db文件的内容,对虚拟地址映射为实际地址,虚拟域用户的文件缺省是/etc/mail/virtusertable.db.表示如下:
虚拟域地址:真实地址
使用方法:makemap hash virtusertable.db < virtusertable>