 |
 |
|
 |
首页 >> 服务器 >> 服务器软件 |
|
|
| Linux开放源代码邮件服务器软件:Exim [服务器软件] |
| IT.com.cn(IT世界网) |
| 2007-2-9 14:26:00 文/ |
|
Exim是基于GPL协议的开放源代码软件,由英国剑桥大学的Philip Hazel开发,目前最新版4.24。Exim是一个MTA(Message Transfer Agent),即消息传输代理,负责邮件的路由、转发和投递。Exim被作者设计成可运行于绝大多数的类Unix系统上,包括Solaris,AIX,Linux等。
Exim与其它开源的MTA(QMail、Postfix)相比,最大的特点是配置极其灵活。Exim的配置文件也是一个文本文件,但它支持一种称为String Expansion的技术。String Expansion可以理解为一种简单的脚本语言,能够执行诸如条件判断、字符串转换等功能。当然,Exim基本的功能也是非常丰富的。
一、Exim的工作模式
在Exim中,有两种称为Driver的元素:Router和Transport。Router对一个邮件地址进行操作,决定如何投递,即交给哪个 Transport,或对地址进行转换,如通过Alias文件。Transport将邮件从Exim的队列中投递到目的地。Exim中存在两种类型的 Transport:本地和远程。邮件被Router成功处理后交给Transport。如果一封邮件有多个收件人,它可能被同时多个不同的 Transport处理。
每个地址都会被依次被配置的各个Router处理,直到其中一个Router接受或被弹回。每个Router都被配置成必须满足一定的前置条件,比如域名必须符合某特定特征,否则就是忽略。每个Router必须指定一个Transport,这样当Router运行成功时,就把邮件交给此 Transport来投递。下面的图描述了Exim的投递过程。
[myimg]upload/routing.png[/myimg]
Exim的Router有:
1. accept: 通常用来处理系统用户和自动回复等 2. dnslookup:根据收件人地址中域名的DNS记录(MX),决定邮件如何路由。 3. ipliteral:对域名是纯IP地址的邮件地址(如my@192.168.0.1)进行路由 4. iplookup:剑桥大学专用的 5. manualroute:这是Exim中最强大的Router。管理人员可以根据若干种不同的条件决定如何路由邮件。 6. queryprogram:顾名思义,这是根据某一程序运行的结果来决定如何路由邮件。 7. redirect:邮件重定向,比如根据.alias文件。
Exim的Transport有:
1. appendfile:这是一个本地Transport,将邮件添加到本地的一个文件或目录中。Exim支持至少三种格式的邮箱:maildir、mbx和mailstore。 2. autoreply:自动回复 3. pipe:由程序来处理邮件的投递。 4. smtp:这是远程Transport,通过SMTP协议与远程主机通讯,来完成邮件的投递。 5. lmtp:使用LMTP协议完成邮件的投递。
为了更好地说明,这里列出作者所在公司使用的Exim的配置文件片断。 Router配置
#系统用户 #先处理操作系统的系统用户,比如mail,root等。 #Check_local_user指令让Exim去检测是否为系统用户,如果是, #则将邮件交给名为local_transport的Transport投递 localuser: driver = accept check_local_user transport = local_delivery
#自动回复 #前置条件是:发件人不是形如-request@, owner-且收件人属性中定义了mailReplyText
gen_auto_reply: driver = accept transport = auto_reply senders = !^.*-request@.* : !^owner-.*@.* : \ !^postmaster@.* : ! ^listmaster@.* : \ !^mailer-daemon@.* condition = ${if eq {${extract {mailReplyText}{RCPT_USER_DATA} }} \ {} {no}{yes}} unseen
#本机邮件 #作者所在的单位采用了单域多机的模式,即用分散的机器存储同一个域名下的用户的邮件。 #前置条件是:收件人属性中定义的mailHost值与当前机器的名字相同 in_this_host: driver = accept transport = save_this_host_maildir condition = ${if eq {TBOX} {${extract {mailHost} \ {RCPT_USER_DATA}}} {yes}{no}}
#同域,非本机邮件 #前置机件是:域名在local_domains列表中。Local_domains是一个域名列表,在配置文件前面定义的。 # not_in_this_host_but_in_this_domain: driver = manualroute domains = +local_domains route_data = ${extract {mailHost} {RCPT_USER_DATA}} transport = redirect_to_real_server
#邮件监控 #前置条件:发件人的域名在monitored_domains列表中。 # save_a_copy_of_outgoing_mail: driver = accept domains = +monitored_domains transport = copy_outgoing unseen
#外域邮件 #前置条件:收件人的域名不在local_domains域名列表中 # not_in_this_host_and_not_in_this_domain: driver = manualroute domains = !+local_domains transport = redirect_to_hq_mailserver route_data = mailhub.mycorp.com
Transport配置
#产生自动回复,但不影响原始邮件 auto_reply: driver = autoreply from = $local_part@mycorp.com to = $sender_address subject = "AR: $h_subject" text = ${extract {mailReplyText}{RCPT_USER_DATA}}
#本机邮件 #用appendfile Transport #采用maildir格式,支持空间配额,自动建立目录 # save_this_host_maildir: driver = appendfile create_directory = true mode = 0700 maildir_format = true directory = /maildata/${extract {mailMessageStore} \ {RCPT_USER_DATA}}/Maildir quota = ${extract {mailQuotaSize}{RCPT_USER_DATA} \ {$value} {QUOTA_SIZE}} quota_filecount = ${extract {mailQuotaCount}{RCPT_USER_DATA} \ {$value} {QUOTA_FILE_COUNT} } quota_warn_threshold = 75%
#非本机邮件 #用smtp Transport #目的地SMTP服务器的地址在前面Router中的route_data中指定 redirect_to_real_server: driver = smtp
#非本域邮件 #用smtp Transport # redirect_to_hq_mailserver: driver = smtp
#系统用户邮件 #也用appendfile Transport local_delivery: driver = appendfile file = /var/mail/$local_part delivery_date_add envelope_to_add return_path_add
#邮件监控 #根据发件人的地址进行归类 # copy_outgoing: driver = appendfile create_directory mode = 0700 maildir_format directory = /var/mail/archive/${sender_address_local_part}/sent
·IT产品报价大全 |
|
|
|
|
[第一页] 1 2 3 [下一页] [最后一页]
|
|
相关文章 |
|
|
|
|
 |
|
 |
|
|