Linux1 邮件服务器  配置sendmail.cf
sendmail.cf文件是sendmail每次启动时要读取的配置文件。它包含了sendmail启动时必须的信息。它列出了所有重要文件的位置,指定了这些文件的缺省权限。包含了一些影响sendmail行为的选项。更重要的是,它还包含了地址重写(rewriting addresses)规则。
sendmail.cf文件是按行组织的。每一个配置命令行都是由命令加上特定参数构成的,例如命令V的参数是一个数字,而F命令的参数则是字母w,再加上绝对路径,如图9-35中第70、91行所示。
图9-35  sendmail.cf配置命令行
 
免费永久的linux服务器在对sendmail.cf文件进行配置时,必须保证每个配置命令行只能有一个命令,且位于该命令行行首(不存在空格),否则配置将不生效。
在该文件中如果行首的第一个字符为“#”,表示该行为注释;如果第一个字符为空格则表示该行为上一行的延续。除此之外,行首的第一个字符均为命令,但是命令同变量或值之间没有间隔。这种格式便于sendmail进行分析,但令很难使用户读懂。下面介绍一下sendmail.cf配置文件中的命令。
1D(定义宏)
命令D定义宏并为其赋值。当宏被定义之后,它就负责提供提供其存储的值给sendmail.cf文件中其他的命令使用或者直接提供给sendmail使用。宏的名字可以是任何单字符,小写的用于sendmail内部宏,用户创建的宏只能使用大写字母作为名字。一些sendmail的内部宏也在sendmail.cf文件里定义。例如在配置文件中的第148、149两行定义了宏D和内部宏n,如图9-36所示。
图9-36  定义宏D和内部宏n
那么宏D的值为cs.mit.edu,宏n的值为MAILER-DEAMON。但若要使用宏的值时,还必须
在宏的名字前面加上符号“$”,以这种形式来引用它的值。例如图9-37配置文件中第150行设置。
图9-37  应用宏的值
如果宏w的值为主机名moon,此时宏j的值就为moon.cs.mit.edu,这便是本主机的全称名(FQDN)。
2CF(定义类)
命令C与F都是用来定义sendmail的类。所谓类,实际上就是由处理方式相同的多个变量组成的数组。与宏一样,类也使用单字符名字,大小写规则也一样。类可以定义在一行之中,也可以分多行定义。例如图9-38中第89、90、91行所示,将内部类w赋值为系统的主机名(系统可以有多个名字)。
图9-38  定义内部类w
命令F是从文件中获取类的值,例如可以把moon、sun、earth保存在sendmail.cw之中,然后用F命令便可以实现同C命令完全相同的结果,如图9-39所示。
图9-39  使用F命令定义类
对类的引用与宏的引用完全一样,事实上宏就是一种类。两者的唯一区别在于,宏只能有一个唯一的值,而类可以有多个值,也可以只有一个值。
3O(设置选项)
命令O是为sendmail的选项赋值,赋给选项的值可以是字符串、整数或布尔值,所有的选项值都是直接由sendmail来使用。需要注意的是,这里所说的选项与sendmail使用的命令行参数不一样。通常情况下,不需要修改这些选项。
4T(定义可信任的用户)
命令T用来定义一组用户列表,这组用户可以使用sendmail带-f参数来修改用户发出的邮件地址。一般情况下,包含root、daemon和uucp。管理员最好不要随意添加其它的用户,否则这种权限在某些用户手中可能会对系统安全构成威胁。可信任的用户可以在一行或多行中定义,但是被定义的用户必须是/etc/passwd中的合法用户。缺省设置值如图9-40所示。
图9-40  T缺省设置值
5P(设置优先级)
sendmail使用命令P定义不同的优先级来处理进入出局缓冲区的。命令P定义的值越高,则优先级也越高,缺省的优先级为0。负优先级的是不产生错误信息的,因此在批量发送邮件是应该定义较底的优先级。在配置文件中,常用的优先级如图9-41所示。
图9-41  常用的优先级
如果用户在发送邮件是需要指定优先级,则需要在邮件的首部中添加Precedence。
6KKey File Declaration
特殊的映射可以定义为Kmapname mapclass arguments。
mapname是可重写规则中使用这个映射的句柄,mapclass是映射类型的名字,arguments的解释依赖与映射类型,通常是包含映射的文件名。
 
在程序设计中,句柄是一种特殊的智能指针。当一个应用程序要引用其它系统(如数据库、操作系统)所管理的内存块或对象时,就需要使用句柄。
7VConfiguration Version Level
提供与老版本配置文件的兼容性能。
8M(定义邮件传输程序)
命令M定义邮件传输程序(mailer)的规格/详细参数,其形式为Mname, {field=value}。
sendmail并不是直接发送各种各样的,它首先将要发送的邮件分类,然后交给相应的mailer来发送,它本身只发送基于SMTP/TCP/IP的邮件。其中[IPC]表示使用sendmail通过smtp来传送邮件。
关于IPC mailer,在sendmail的文档里有一段有趣的特殊解释就是当规则集0解析到IPC mailer时会处理一些特殊的过程。比如直接用IP地址发送邮件可以用“128.32.149.78”的形式,若用“ucbvax.berkeley.edu”将会怎么样呢?它会被作为字符串传递,用这样的方法用户可以构造一个特殊的邮件地址,使自己的邮件按指定的路线发送,而通常用户是不关心也不知道自己的邮件的发送路线的。
9H(定义邮件的首部格式)
命令H定义sendmail插进首部的行的格式。
10R(定义重写规则)
重写规则是sendmail配置文件的核心内容,每一重写规则由命令R定义,其形式为Rpattern transformation comment。命令R中的字段由制表符进行分隔,系统处理时忽略注释字段(comment),模式字段(pattern)与改写字段(transformation)为该命令的核心。
重写规则将输入地址与模式进行匹配,如果匹配,则将该地址用规则中改写字段的规则重写为新的格式。每一规则可以多次处理同一地址,这是因为地址在重写之后,仍要再次同该模式进行匹配,如果仍旧匹配则再次改写,直到不再匹配为止(使用“$:”可以避免无限循环)。
在Linux中格式的表达应该为Rlhs rhs comment,其中lhs代表left hand side;rhs代表right hand side。
11S(设置重写规则集)
规则集是一组可以用数字来引用的相关重写规则。命令S是规则集的开始并赋予它一个数字以便由邮件传输程序来调用。规则集可以被看作用来处理地址的子程序或函数。具有特殊功能并可由sendmail直接调用的规则集有5个:
规则集3:为最大最复杂的规则集,也是用于地址的第一个规则集。它将地址转化为正规形式为user@host.domain
规则集0:应用于传输邮件的地址。必须在规则集3之后使用,并仅用于实际邮件传输中接收者的地址。它可以将地址解析成mailer或host或user的形式,由邮件传输者、接收方主机和接收用户的名字组成。
规则集1:应用于消息中所有发送者地址。
规则集2:应用于消息中所有接收者地址。
规则集4:应用于消息中所有地址并将内部地址格式转化为外部地址格式。
图9-42说明了消息和地址通过这些规则集的流程:
图9-42  规则集使用流程图
图中,D代表sender domain addition(发送方域响应);S代表mailer-specific sender rewriting(发件方重写规则);R代表mailer-specific recipient rewriting(接收方重写规则)。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。