抄了好几个晚上,今晚终于把sendmail.cf文件的注释完成了。

还是从Red Hat Linux宝典上摘录的,不当之处希望各位能指正。有几个没有注释,有谁知道的话,希望能够补全。 :D 谢谢。
#
# Copyright (c) 1998-2003 Sendmail, Inc. and its suppliers.
# All rights reserved.
# Copyright (c) 1983, 1995 Eric P. Allman. All rights reserved.
# Copyright (c) 1988, 1993
# The Regents of the University of California. All rights reserved.
#
# By using this file, you agree to the terms and conditions set
# forth in the LICENSE file which can be found at the top level of
# the sendmail distribution.
#
第一部分包括创建该sendmail.cf文件的组件文件清单,还包括有关该配置文件格式和版本的信息。
######################################################################
######################################################################
#####
##### SENDMAIL CONFIGURATION FILE
#####
##### built by root@server.magiccity.com on Sun Feb 27 22:20:43 CST 2005
##### in /etc/mail
##### using /usr/share/sendmail-cf/ as configuration include directory
#####
######################################################################
#####
##### DO NOT EDIT THIS FILE! Only edit the source .mc file.
#####
######################################################################
######################################################################

##### $Id: cfhead.m4,v 8.108.2.3 2003/04/03 17:51:51 ca Exp $ #####
##### $Id: cf.m4,v 8.32 1999/02/07 07:26:14 gshapiro Exp $ #####
##### setup for Red Hat Linux #####
##### $Id: linux.m4,v 8.13 2000/09/17 17:30:00 gshapiro Exp $ #####



##### $Id: local_procmail.m4,v 8.21.42.1 2002/11/17 04:25:07 ca Exp $ #####


##### $Id: no_default_msa.m4,v 8.2 2001/02/14 05:03:22 gshapiro Exp $ #####

##### $Id: smrsh.m4,v 8.14 1999/11/18 05:06:23 ca Exp $ #####

##### $Id: mailertable.m4,v 8.23 2001/03/16 00:51:26 gshapiro Exp $ #####

##### $Id: virtusertable.m4,v 8.21 2001/03/16 00:51:26 gshapiro Exp $ #####

##### $Id: redirect.m4,v 8.15 1999/08/06 01:47:36 gshapiro Exp $ #####

##### $Id: always_add_domain.m4,v 8.11 2000/09/12 22:00:53 ca Exp $ #####

##### $Id: use_cw_file.m4,v 8.11 2001/08/26 20:58:57 gshapiro Exp $ #####


##### $Id: use_ct_file.m4,v 8.11 2001/08/26 20:58:57 gshapiro Exp $ #####


##### $Id: local_procmail.m4,v 8.21.42.1 2002/11/17 04:25:07 ca Exp $ #####

##### $Id: access_db.m4,v 8.24 2002/03/06 21:50:25 ca Exp $ #####

##### $Id: blacklist_recipients.m4,v 8.13 1999/04/02 02:25:13 gshapiro Exp $ #####

##### $Id: accept_unresolvable_domains.m4,v 8.10 1999/02/07 07:26:07 gshapiro Exp $ #####


##### $Id: proto.m4,v 8.649.2.24 2003/08/04 21:14:26 ca Exp $ #####

# level 10 config file format
V10/Berkeley
说明这个配置文件相当于sendmail V10的开放原代码伯克利发布版。

# override file safeties - setting this option compromises system security,
# addressing the actual file configuration problem is preferred
# need to set this before any file actions are encountered in the cf file
#O DontBlameSendmail=safe
如不设置safe,sendmail将不接受转发文件、包含文件、收件箱、配置文件、类文件或者散列映射文件,这些文件使组或所用用户都可写的文件,或者位于一个组或所用用户都可写的目录下(在sendmail.mc文件中将confDONT_BLAME_SENDMAIL设置为safe会覆盖文件安全检查)。

# default LDAP map specification
# need to set this now before any LDAP maps are defined
#O LDAPDefaultSpec=-h localhost
利用LDAPDefaultSpec选项,可以添加包括LDAP专用设置的默认LADP映射。默认情况下,没有设置任何LDAP映射。主机:-h host 端口:-p port 域名:-d bindDN

##################
# local info # 本地信息项
##################

# my LDAP cluster
# need to set this before any LDAP lookups are done (including classes)
#D{sendmailMTACluster}$m

Cwlocalhost定义类宏w,它包括对该计算机给出的所有可能的主机名列表,这包含所用NDS别名、/etc/hosts中的所用引用甚至还有在该计算机上拥有帐户的个别用户使用的错误名字(避免使用那些邮件返回)。因为这可能使得一些主机上会有很长的列表,所以Fw/etc/mail/local-host-names一行定义文件类宏w,使这些主机名存储在一个单独的文件中(是/etc/mail/local-host-names文件).
Cwlocalhost
# file containing names of hosts for which we receive email
Fw/etc/mail/local-host-names

# my official domain name
# ... define this only if sendmail cannot automatically determine your domain
#Dj$w.Foo.COM
如果在sendmail.mc文件中已经设置了confDOMAIN_NAME,上一行应该不加注释并且用户的域名会取代Foo.COM。但是,将这一行注释掉,sendmail将试图自己来确定用户计算机的域名。建议让sendmail决定规范域名。

CP.
定义类P,(类只包括一个句号“.”)

# "Smart" relay host (may be null)
DS
指明没有定义智能中继主机。

# operators that cannot be in local usernames (i.e., network indicators)
CO @ % !
定义类O,它列出了用户名中无效的三个字符(@,%,!)。

# a class with just dot (for identifying canonical names)
C..
定义类“.”,(类只包括一个句号“.”)

# a class with just a left bracket (for identifying domain literals)
C[[
定义类“ [”

# access_db acceptance class
C{Accept}OK RELAY


C{ResOk}OKR


# Hosts for which relaying is permitted ($=R)
FR-o /etc/mail/relay-domains
指定一个文件R,该文件是一个邮件可以中继的主机列表,并存储在/etc/mail/relay-domains文件中。

# arithmetic map
Karith arith
# macro storage map
Kmacro macro
# possible values for TLS_connection in access map
C{tls}VERIFY ENCR





# dequoting map
Kdequote dequote
Kdequote声明dequote类的dequote数据库。它用来清楚重写规则中的地址的引用标记。

# class E: names that should be exposed as from this host, even if we masquerade
# class L: names that should be delivered locally, even if we have a relay
# class M: domains that should be converted to $M
# class N: domains that should not be converted to $M
#CL root
C{E}root
E类:指出根用户的邮件应当一直使用适当、完整的主机名和域名,即使其他指令要求这个主机名伪装成别的主机名。
L类:列出在本地主机接收邮件的用户名,即使其他指令要求所有邮件都必须中继到别处。
M类:指出哪些域应该伪装主机名(如在下面的M宏中设置的那样)。
N类: 指出不应该伪装主机名。
C{w}localhost.localdomain



# my name for error messages
DnMAILER-DAEMON


# Mailer table (overriding domains)
Kmailertable hash -o /etc/mail/mailertable.db
定义mailertable数据库,mailertable文件允许将特定的电子邮件转发到所选的服务器。

# Virtual user table (maps incoming users)
Kvirtuser hash -o /etc/mail/virtusertable.db
定义virtusertable数据库,virtusertable文件用于在多个域中为特定用户重定向邮件。

CPREDIRECT
给类P添加文本REDIRECT,它与重定向特性(在m4配置文件启用)一起使用,允许为不再有效的帐户创建别名。

# Access list database (for spam stomping)
Kaccess hash -T<TMPF> -o /etc/mail/access.db
定义access列表数据库,access文件可用于依据某种信息有选择地接收、拒绝、中继或者丢弃任何邮件。

# Configuration version number
DZ8.12.10
设定宏Z,它包含sendmail守护进程的所有版本信息。


############### sendmail.cf文件包含相当多的选项用于Red Hat Linux系统中设置
# Options # sendmail,选项定义在Option块之后开始。
###############

# strip message body to 7 bits on input?
O SevenBitInput=False
SevenBitInput指明Sendmail不应清除所有邮件信息的每一字节的最高位。

# 8-bit data handling
#O EightBitMode=pass8
EightBitMode指明sendmail如何处理未明确表明为8位的邮件数据。
 pass8:允许原样传送所有的8位数据。
 mimefy:把任何未指定的数据类型转化为MIME编码类型。
 strict:拒绝任何非8位数据,注意,该选项对表明为8位的数据没有影响。

在重建别名数据库之前,sendmail先进行几项检测,以确保没有其他进程正在试图进行相同的操作。下面二个参数与别名文件有关。
# wait for alias file rebuild (default units: minutes)
O AliasWait=10
AliasWait:指定sendmail在等待和执行检测之间切换的分钟数。

# location of alias file
O AliasFile=/etc/aliases
AliasFile:指明含有邮件别名的存文本文件的位置。

下面二个参数与sendmail分配磁盘空间的方式有关。
# minimum number of free blocks on filesystem
O MinFreeBlocks=100
MinFreeBlocks指明,如果接收一个邮件会使保存邮件的文件系统上可用空间少于100个空闲块(100K),这个邮件就会被拒绝。

# maximum message size
#O MaxMessageSize=1000000
限制传入邮件的最大容量(以上是1M)。在默认情况下,对容量没有限制。

# substitution for space (blank) characters
O BlankSub=.
BlankSub用指定的字符(以上是“.”)代替电子邮件地址中的空白空间(非法字符)。

# avoid connecting to "expensive" mailers on initial submission?
O HoldExpensive=False
如果MDA定义(将在本节后面介绍)包括选项F=e,邮件程序被归类为开销太大,简单地说就是传送邮件时链接数度慢或者涉及其他处理延迟等。HoldExpensive选项允许开销太大的MDA处理的邮件队列等待,而不是马上处理。以上一行禁用这个选项,下行与检测点队列有关。

# checkpoint queue runs after every N successful deliveries
#O CheckpointInterval=10
把邮件传送到多个地址时,sendmail有时需要记录那些收件人已经收到邮件。CheckpointInterval选项设置在qf文件更新过程中处理的接收邮件地址的数目。

# default delivery mode
O DeliveryMode=background
设置sendmail传送方式。
 background:sendmail生成一个副本,并异步处理邮件。
 deferred:邮件队列等待,所有处理过程包括DNS查找和数据库访问都被延迟,一直到队 列运行为止。
 interactive:在前台以同步方式处理队列。
 queueonly:与deferred很相似,但立即解析主机名和查询数据库。

# error message header/file
#O ErrorHeader=/etc/mail/error-header
ErrorHeader允许指定文件中的文本包含在所有状态信息中与xf文件中的任何错误信息一起返回给发件人。

# error mode
#O ErrorMode=print
本地用户在试图传送邮件时,会遇到许多问题,ErrorMode选项为他们提供了5种显示错误信息的方法:
 e:把错误信息传送给发件人,但能成功地终止。
 m:把错误信息传送给发件人,带有错误代码退出系统。
 p:把错误信息打印到用户终端,并保存在~/dead.letter文件种。默认值。
 q:忽略所用发送的错误信息。
 w:把错误信息写入用户终端。

# save Unix-style "From_" lines at top of header?
#O SaveFromLine=False
在默认情况下,禁用SaveFromLine选项(False),其结果是,以“From”(区分一个邮件结尾和下一个邮件标题的特殊标记)文本开始的邮件信息行前面加上>符号,放在传送邮件的前面。

# queue file mode (qf files)
#O QueueFileMode=0600

# temporary file mode
O TempFileMode=0600
TempFileMode设置临时文件的使用权限为文件所有者只读。建议最好不要选择其他方式。

# match recipients against GECOS field?
#O MatchGECOS=False
MatchGECOS选项将sendmail以用户全名的转换形式传送邮件,这种转换形式在/etc/passwd文件中的GECOS字段指定。例:用户wharris(按照GECOS字段)的全名是Wayne Harris,这个用户可以使用wharris@mybox.com,Wayne_Harris@mybox.com或者Wayne.Harris@mybox.com来接收邮件。不提倡使用这个选项,因为它会产生岐义,并且用户可能会以一种破坏sendmail正常的邮件传送机制的方式改变他们的GECOS字段。

# maximum hop count
#O MaxHopCount=25
不能传送的信息反馈到发送者之前,MaxHopCount选项规定跳数(邮件从一台机器到另一台机器的传送)的最大值。

# location of help file
O HelpFile=/etc/mail/helpfile
HelpFile选项列出包括联机帮助文本的文件名。执行telnet localhost 25,然后输入help,查看相关数据。

# ignore dots as terminators in incoming messages?
#O IgnoreDots=False
IgnoreDots选项决定当sendmail遇到邮件中只包含单个“.”字符的行时如何处理。该选项不存在,被注释掉,或者设为False时,单个圆点符号被看做是邮件的结束标志(RFC 821规定)。如果设为True,圆点字符不表示什么特殊的意义。

# name resolver options
#O ResolverOptions=+AAONLY
ResolverOptions用来调整DNS查询的方式。输入man resolver,可找到对有效标志的描述。

# deliver MIME-encapsulated error messages?
O SendMimeErrors=True
SendMimeErrors选项定义传送状态通知邮件是采用MIME编码或者保留为纯文本。

# Forward file search path
O ForwardPath=$z/.forward.$w:$z/.forward
ForwardPath选项定义单个用户的.forward文件的查找路径。$z:改用户的主目录,$w:本地主机名。例如,本地机al上用户kzabon的主目录是/home/kzabon,sendmail首先查找/home/kzabon/.forward.al文件,然后查找/home/kzabon/.forward文件,如两个文件都不存在,邮件就会被传送到收件箱文件/var/spool/mail/kzabon中。

连接的高速缓存可以通过一个连接使Sendmail把许多邮件信息传送到同一机器上,而不是打开与一个主机的连接、发送邮件、关闭连接、再打开与同一个主机的另一个连接。
# open connection cache size
O ConnectionCacheSize=2
ConnectionCacheSize选项可以减少建立和结束连接的开销。默认允许同时最多有2个连接。

# open connection cache timeout
O ConnectionCacheTimeout=5m
ConnectionCacheTimeout选项限制打开一个连接的时间,默认为5分钟。

# persistent host status directory
#O HostStatusDirectory=.hoststat
HostStatusDirectory选项可以建立一个目录(如果没有指定完整路径名,则相对于队列目录/var/spool/mqueue),存储所有计算机的状态,sendmail利用这些信息来建立连接。在默认情况下不设置,因为执行它只会消耗资源,不会有实质性收益。

# single thread deliveries (requires HostStatusDirectory)?
#O SingleThreadDelivery=False
SingleThreadDelivery选项规定任何一台计算机最多只能有一个连接。它不仅需要HostStatusDirectory选项,而且当本地机正在处理来自同一主机的大容量邮件时,它禁止将任何邮件发送到该主机。

# use Errors-To: header?
O UseErrorsTo=False
UseErrorsTo选项允许sendmail使用或者忽略“Errors-To:”标题行。如设为True,所有传送错误将发往由标题行指定的地址中。

# log level
O LogLevel=9
LogLevel选项设定发往syslog工具的日志信息的优先权和错误的严重性。改选项在0(只报告严重错误)~98(记录最多的调试信息和所有重要的信息)之间。

# send to me too, even in an alias expansion?
#O MeToo=True
MeToo选项决定当发件人也出现在邮件列表的发送列表中时,选择sendmail的行为。设为Treu时,发件人收到邮件。

# verify RHS in newaliases?
O CheckAliases=False
CheckAliases设为true时,它将评测冒号左边的地址,保证冒号右边的地址是一个有效的传递**。

以前用空格格开收件人列表。后来用逗号,因为收件人名字中经常有空格。
# default messages to old style headers if no special punctuation?
O OldStyleHeaders=True
设为True时,OldStyleHeaders允许用逗号分隔收件人名单,将没有用引号括起来的空格转换成逗号。设为False时,未注释掉的空格转换成BlankSub选项规定的字符。

# SMTP daemon options
O DaemonPortOptions=Port=smtp,Addr=127.0.0.1,Name=MTA
DaemonPortOptions:用来限制端口数、sendmail侦听入站连接的网络、同时入站的连接数、TCP/IP发送和接收缓存区的大小。(smtp守护进程)
在默认情况下,上面显示的DaemonPortOption=Port=smtp行限制为访问smtp端口(25)并只能对本机(ADDr=127.0.0.1)传送邮件(Name=MTA)。如在sendmail.cm文件中注释掉DAEMON_PORTS选项,此项将如下:O DaemonPortOptions= Name=MTA


# SMTP client options
#O ClientPortOptions=Family=inet, Address=0.0.0.0
与DaemonPortOptions相同,只是它用于出站连接而不是入站连接。默认情况下,由于此行注释,出站连接并不只限定到本机。

# Modifiers to define {daemon_flags} for direct submissions
#O DirectSubmissionModifiers

# Use as mail submission program? See sendmail/SECURITY
#O UseMSP

# privacy flags
O PrivacyOptions=authwarnings,novrfy,noexpn,restrictqrun
PrivacyOptions用于确保入站连接严格符合SMTP行为、禁用EXPN(noexpn)或者VEFY(novrfy)功能、禁止返回给收件人、限制可以运行mailq和sendmail –q命令的用户。该选项也可使用“X-Authentication-Warning:”标题行。

# who (if anyone) should get extra copies of error messages
#O PostmasterCopy=Postmaster
PostmasterCopy:可指定一个(或几个)地址接收所有发往发件人的传送状态通知信息的副本,默认设置为不发送任何副本。

# slope of queue-only function
#O QueueFactor=600000
QueueFactor选项可以根据当前系统载荷平均值设定关闭值,使发送邮件队列等待而不是立刻发送。

# limit on number of concurrent queue runners
#O MaxQueueChildren

# maximum number of queue-runners per queue-grouping with multiple queues
#O MaxRunnersPerQueue=1

# priority of queue runners (nice(3))
#O NiceQueueRun

# shall we sort the queue by hostname first?
#O QueueSortOrder=priority
QueueSortOrder选项可以选择用来确定队列优先权的方法,该选项可以设置为
 host:队列中的邮件可以根据接收主机和优先权进行排序。
 priority:传统的优先级。
 time:根据提交的次序。

# minimum time in queue before retry
#O MinQueueAge=30m

# how many jobs can you process in the queue?
#O MaxQueueRunSize=10000
MaxQueueRunSize选项指定在队列一次运行期间可以处理的排队等待的最大邮件数。默认10000个。

# perform initial split of envelope without checking MX records
#O FastSplit=1

# queue directory
O QueueDirectory=/var/spool/mqueue
QueueDirectory选项指定排队等待的发送邮件的位置(默认/var/spool/mqueue)。这个目录的文件名后缀:
 df:组成电子邮件信息主体的数据。
 qf:包含邮件标题和其他管理信息的队列控制文件。
 tf:出现发送错误时,创建的qf文件的临时副本。
 xf:试图发送邮件时出现的所有错误信息。

# key for shared memory; 0 to turn off
#O SharedMemoryKey=0


设置超时,其实际时间值可设为秒,分钟,小时,天(s,m,h,d)。超时选项以Timeout.event形式列出。event由下表列出的超时事件来代替。
# timeouts (many of these)
#O Timeout.initial=5m
O Timeout.connect=1m
#O Timeout.aconnect=0s
#O Timeout.iconnect=5m
#O Timeout.helo=5m
#O Timeout.mail=10m
#O Timeout.rcpt=1h
#O Timeout.datainit=5m
#O Timeout.datablock=1h
#O Timeout.datafinal=1h
#O Timeout.rset=5m
#O Timeout.quit=2m
#O Timeout.misc=2m
#O Timeout.command=1h
O Timeout.ident=0
#O Timeout.fileopen=60s
#O Timeout.control=2m
O Timeout.queuereturn=5d
#O Timeout.queuereturn.normal=5d
#O Timeout.queuereturn.urgent=2d
#O Timeout.queuereturn.non-urgent=7d

O Timeout.queuewarn=4h
#O Timeout.queuewarn.normal=4h
#O Timeout.queuewarn.urgent=1h
#O Timeout.queuewarn.non-urgent=12h

#O Timeout.hoststatus=30m
#O Timeout.resolver.retrans=5s
#O Timeout.resolver.retrans.first=5s
#O Timeout.resolver.retrans.normal=5s
#O Timeout.resolver.retry=4
#O Timeout.resolver.retry.first=4
#O Timeout.resolver.retry.normal=4
#O Timeout.lhlo=2m
#O Timeout.auth=10m
#O Timeout.starttls=1h
超时事件 等待
aconnect 电子邮件成功传送给收件人
auth 对SMTP AUTH请求的回应
command 下一个命令
connect 连接认可
control 整个套接字事务完成
datablack 完成读数据块
datafinal 确认最后的圆点字符或者EOF标记
datainit 确认DATA
fileopen 完成一个打开NFS文件命令
helo HELO或EHLO
hoststatus 主机状态检测结果
iconnect 完成初始连接(2)系统调用
ident 识别协议响应的结果
initial 初始化问候信息
lhlo LMTP IHLO命令的回应
mail 确认MAIL命令
misc 确认其他SMTP命令
queuereturn 完成邮件传送(传送附加邮件)
queuewarn 完成邮件传送(传送报警邮件)
quit 确认QUIT命令
rcpt 确认RCPT命令
resolver.retrans(默认、首先和正常) 在解析查询失败之后重传之前的时间
resolver.retry(默认、首先和正常) 在失败之前重试解析查询的次数
rset 确认RSET命令
starttls 对SMTP START-TLS命令和TLS握手的回应


# time for DeliverBy; extension disabled if less than 0
#O DeliverByMin=0

# should we not prune routes in route-addr syntax addresses?
#O DontPruneRoutes=False
DontPruneRoutes:把一个地址指定为“路由地址”,指出一条通过一系列主机的明确路径。设为True时,后面跟着该路由。

# queue up everything before forking?
O SuperSafe=True
SuperSafe设为False,在传送一封邮件之前,Sendmail会将该邮件读入内存中。这时,如机器崩溃,该邮件会丢失。设为True时,邮件一直保存在文件系统中,直到完成传送为止。

# status file
O StatusFile=/etc/mail/statistics
StatusFile:指定一个存储邮件传送统计信息的文件。mailstatus程序分析这个文件并显示:发送邮件的数量及大小(以KB计)、接收邮件的数量及大小(以KB计)、拒绝的邮件数、丢失的邮件数。第一栏和最后一栏指定MDT(邮件传送**)。

# time zone handling:
# if undefined, use system default
# if defined but null, use TZ envariable passed in
# if defined and non-null, use that info
#O TimeZoneSpec=
TimeZoneSpec设置本地时区。

# default UID (can be username or userid:groupid)
O DefaultUser=8:12
DefaultUser选项指定当Sendmail传送邮件时切换成的默认用户的UID和GID。以上为mail.

# list of locations of user database file (null means no lookup)
O UserDatabaseSpec=/etc/mail/userdb.db
UserDatabaseSpec选项允许选择另一个数据库以重定向接收邮件和重写发送邮件的标题字段。

# fallback MX host
#O FallbackMXhost=fall.back.host.net
FallbackMXhost选项用于建立后备连接,可以由与Internet没有可靠连接的站点使用,这样就可以把邮件中继到另一台有较好连接的主机上,而不是在本地机队列中等待发送。
如果发送邮件的主机也是接收主机的一个MX主机,一切有更高MX优先权的主机都被认为无效。如果这样导致没有邮件交换程序可用且TryNullMXList选项设为False,那么该邮件就会返回到其发送者;如设为True,邮件传送程序在邮件因无法传送而返回之前,尝试把该邮件直接传送到接收主机上。

# if we are the best MX host for a site, try it directly instead of config err
O TryNullMXList=true

# load average at which we just queue messages
#O QueueLA=8
QueueLA选项设定系统负载平均值,超过该值后邮件不是立即发送,而是在队列中等待处理。

# load average at which we refuse connections
#O RefuseLA=12
RefuseLA选项设定系统负载平均值,到达该值后将不再接受邮件。

# load average at which we delay connections; 0 means no limit
#O DelayLA=0

sendmail派生出一个副本处理接收邮件和队列。
# maximum number of children we allow at one time
#O MaxDaemonChildren=0
MaxDaemonChildren选项限制了同时存在的原Sendmail进程的子进程的数目。(这似乎是个好注意,通过占用所有可用的子进程,其他人在你机器上实现“拒绝服务”***就容易实现。较好的办法是使用ConnectionRateThrottle选项(如果必须限制入站连接)。

# maximum number of new connections per second
#O ConnectionRateThrottle=0
ConnectionRateThrottle选项是放慢接收邮件的速度,不是拒绝超过一个阀值的所有连接。例如,值为3时,同时有8个连接,只有3个被立即处理;延迟1秒以后,又有3个被处理,延迟2秒后再处理其他2个。

# work recipient factor
#O =30000
RecipientFactor选项根据收件人数来改变发送队列中的邮件的次序。


# deliver each queued job in a separate process?
#O ForkEachJob=False
ForkEachJob选现指示Sendmail派生一个副本,处理队列中的每个邮件。对于内存有限的机器来说,非常有用,但是一般最好不用(或设为False)。

# work class factor
#O ClassFactor=1800
ClassFactor选项根据优先级来改变发送队列中的邮件的次序。

# work time factor
#O RetryFactor=90000
RetryFactor选项可以用来更改队列中那些已经处理但还未传送的邮件的优先级。

# default character set
#O DefaultCharSet=iso-8859-1
DefaultCharSet选项定义将8位格式的邮件转换为7位格式时使用的MIME类型。

# service switch file (name hardwired on Solaris, Ultrix, OSF/1, others)
#O ServiceSwitchFile=/etc/mail/service.switch
由于/etc/nsswitch.conf文件已经指定了处理各种数据库请求的次序,所以可以忽略ServiceSwitch选项。即使该选项已定义,最好把它注释。

# hosts file (normally /etc/hosts)
#O HostsFile=/etc/hosts
HostsFile选项指定本地自定义IP地址到主机名转换的文件的位置,默认为/etc/hosts。

# dialup line delay on connection failure
#O DialDelay=10s
DialDelay选项指定如果sendmail初始连接的尝试失败,用几秒或几分钟表示的sendmail休眠的时间。

# action to take if there are no recipients in the message
#O NoRecipientAction=add-to-undisclosed
如果邮件在标题行中没有收件人的信息,NoRecipientAction选项指示sendmail采取的措施。
 add-appanently-to:添加一个“Appanently-To”标题。
 add-bcc:添加一个空“BCC”标题行以便遵循RFC 821规范。
 add-to:添加一个“To”标题,以及从邮件“信封”获得的收件人。
 add-to-undisclosed:添加一个空“To:undisclosed-recipients:;”标题。
 none:不修改邮件内容便发送。

# chrooted environment for writing to files
#O SafeFileEnvironment=/arch
SafeFileEnvironment选项通过使用chroot系统调用提供一个将邮件传送到文件的更安全的位置。

# are colons OK in addresses?
#O ColonOkInAddr=True
ColonOkInAddr选项确定地址中的冒号是否有效。默认是False,表示电子邮件中的冒号是一种错误。

# shall I avoid expanding CNAMEs (violates protocols)?
#O DontExpandCnames=False
DontExpandCnames选项控制sendmail是否接受CNAMES记录作为规范名。如果是True,则在重写规则中,CNAMES记录是有效的。如为False,CNAMES记录必须转换成重写规则中所有的有效地址记录。

# SMTP initial login message (old $e macro)
O SmtpGreetingMessage=$j Sendmail $v/$Z; $b
SmtpGreetingMessage定义当客户机连接到本地机上的sendmail守护进程时,显示的标题文本。
 $b:当前的本地时间和日期。
 $j:评测本地机的FQDN。
 $v:配置文件的版本。
 $z:可执行文件的版本。
其打印结果:220 a.b.com ESMTP Sendmail 8.12.8-4/8.12.8-4;Mon,8 Sep 2002 10:12:13 -0400

# UNIX initial From header format (old $l macro)
O UnixFromLine=From $g $d
UnixFromLine选项定义邮箱文件中用做邮件分隔的“From”标题行格式。
 $g:显示发件人的电子邮件地址(后面空两格)。
 $d:显示收到电子邮件的当地时间和日期。

# From: lines that have embedded newlines are unwrapped onto one line
#O SingleLineFromHeader=False
SingleLineFromHeader选项设为True时,则“From:”标题中的所有新行转换成空格,否则分开的标题行被保留。

# Allow HELO SMTP command that does not include a host name
#O AllowBogusHELO=False
设置SMTP响应没有相应主机名的HELO请求。AllowBogusHELO设为True,不强制实施HELO命令后必须跟一个主机名的限制。如为False,必须执行RFC 1123规范指定的行为。

# Characters to be quoted in a full name phrase (@,;:\()[] are automatic)
#O MustQuoteChars=.
引用特殊字符。在默认情况下(并且遵循RFC 821规范),如果第一行中列举9个字符在地址中的非地址部分(例如,用户名或昵称),这几个字符必须被引用。.和’字符也可在MustQuoteChars选项中指定为需要引用。

# delimiter (operator) characters (old $o macro)
O OperatorChars=.:%@!^/[]+
OperatorChars选项列出了用于地址中分界的字符(除sendmail规定的一组分界符(、)、<、>、,、;、\、”、\r、\n外),不能改变这个选项。

# shall I avoid calling initgroups(3) because of high NIS costs?
#O DontInitGroups=False
DontInitGroups选项(如设为True)强制sendmail不处理initgrougs调用。当组有许多成员或者使用慢速名称服务时,这个选项是非常有用的。默认False。

# are group-writable :include: and .forward files (un)trustworthy?
# True (the default) means they are not trustworthy.
#O UnsafeGroupWrites=True
UnsafeGroupWrites选项已经被DontBlameSendmail选项的多种参数多代替。


# where do errors that occur when sending errors get sent?
#O DoubleBounceAddress=postmaster
DoubleBounceAddress选项规定错误信息的接受者;错误信息是由于不能传送以前的错误信息而引起的。默认别名为postmaster。

# where to save bounces if all else fails
#O DeadLetterDrop=/var/tmp/dead.letter
如退回的电子邮件不能写入其他位置(默认/var/tmp/dead.letter),DeadLetterDrop选项设置保存退回的电子邮件的备份位置。

# what user id do we assume for the majority of the processing?
#O RunAsUser=sendmail
RunAsUser选项可将sendmail配置成作为非特权用户完成它的大部分处理工作(而不是读取配置文件和侦听特权端口上的入站连接)。(不足之处:要求非特权用户访问所有的.forward文件、:include文件和队列目录。这很可能需要不加限制的使用DoubleBounceAddress选项,导致它所引起的问题比它解决的问题更多。

# maximum number of recipients per SMTP envelope
#O MaxRecipientsPerMessage=100
MaxRecipientsPerMessage选项为封堵垃圾邮件(非请求型商务电子邮件或者非请求型成批电子邮件)指定每封邮件的单个收件人的人数上限,垃圾垃圾邮件通常发往大型发送列表。默认情况没有任何限制。

# limit the rate recipients per SMTP envelope are accepted
# once the threshold number of recipients have been rejected
#O BadRcptThrottle=20
如果从单独一个SMTP信封中拒收的收件人超过了BadRcptThrottle选项值,那么sendmail将在每次拒收之后休眠1秒。这就意味着减缓了某些拒绝服务***。

# shall we get local names from our installed interfaces?
O DontProbeInterfaces=true
DontProbeInterfaces选项(如设为True)使sendmail不会自动修改带有主机名的类宏Cw和所有网络接口的地址。在默认情况下,为Cw添加了等效的主机和地址。

# Return-Receipt-To: header implies DSN request
#O RrtImpliesDsn=False
RrtImpliesDsn选项将一个传送状态通知发送给信封发送者而不是发送给标题中的地址。

# override connection address (for testing)
#O ConnectOnlyTo=0.0.0.0
ConnectOnlyTo选项将所有邮件强制发送到给定IP。(对于测试非常有用)

# Trusted user for file ownership and starting the daemon
#O TrustedUser=root
TrustedUser选项用来设置系统上那个用户能够被信任以拥有与sendmail相关的文件和运行sendmail守护进程。该用户名可以是包含在/etc/passwd文件中的用户名或用户ID。为了安全,可改为smmsp。

# Control socket for daemon management
#O ControlSocketName=/var/spool/mqueue/.control

# Maximum MIME header length to protect MUAs
#O MaxMimeHeaderLength=2048/1024

# Maximum length of the sum of all headers
#O MaxHeadersLength=32768

# Maximum depth of alias recursion
#O MaxAliasRecursion=10

# location of pid file
#O PidFile=/var/run/sendmail.pid

# Prefix string for the process title shown on 'ps' listings
#O ProcessTitlePrefix=prefix

# Data file (df) memory-buffer file maximum size
#O DataFileBufferSize=4096

# Transcript file (xf) memory-buffer file maximum size
#O XscriptFileBufferSize=4096

# lookup type to find information about local mailboxes
#O MailboxDatabase=pw

# list of authentication mechanisms
#O AuthMechanisms=EXTERNAL GSSAPI KERBEROS_V4 DIGEST-MD5 CRAM-MD5

# default authentication information for outgoing connections
#O DefaultAuthInfo=/etc/mail/default-auth-info

# SMTP AUTH flags
O AuthOptions=A
AuthOptions激活验证。
 A:在验证成功时执行带有AUTH=参数的MAIL FROM命令。

# SMTP AUTH maximum encryption strength
#O AuthMaxBits

# SMTP STARTTLS server options
#O TL***vOptions

# Input mail filters
#O InputMailFilters


# CA directory
#O CACertPath 指出含有CA证书的目录。
# CA file
#O CACertFile 指出单个CA证书。
# Server Cert
#O ServerCertFile 指明sendmail作为服务器时所用的CA证书。
# Server private key
#O ServerKeyFile 指明sendmail作为服务器时所用的相关的私有密钥。
# Client Cert
#O ClientCertFile 指明sendmail作为客户机时所用的CA证书。
# Client private key
#O ClientKeyFile 指明sendmail作为客户机时所用的相关的私有密钥。
# DHParameters (only required if DSA/DH is used)
#O DHParameters
# Random data source (required for systems without /dev/urandom under OpenSSL)
#O RandFile

############################
# QUEUE GROUP DEFINITIONS #
############################


###########################
# Message precedences # 设置邮件优先级
###########################

Pfirst-class=0
Pspecial-delivery=100
Plist=-30
Pbulk=-60
Pjunk=-100
―――――――――――――――――――――――――――――――――――――――
名称 含义
first-class 除非在邮件标题中重写,否则这是默认优先级。
special-delivery 队列中首先传送的最高优先级邮件。
list 此优先级用于从邮件列表中发送的大多数邮件
bulk 无关紧要的广播式邮件。还表示如果传送有问题,返回的通知中不
包括邮件正文。
junk 无价值的电子邮件,可能是程序的输出或者测试邮件,其正文也不
包括在返回的通知中
――――――――――――――――――――――――――――――――――――――――

#####################
# Trusted users # 可信任用户:
##################### 指定允许使用sendmail –f标记来设定发件人
的用户,而不是运行这个命令的用户
# this is equivalent to setting class "t"
Ft/etc/mail/trusted-users
Troot
Tdaemon
Tuucp

#########################
# Format of headers # 指定标题格式
######################### 以下变量使用适当的值替换后,这个文本块
就变成/var/spool/mqueue目录中的qf文件。
H?P?Return-Path: <$g>
HReceived: $?sfrom $s $.$?_($?s$|from $.$_)
$.$?{auth_type}(authenticated$?{auth_ssf} bits=${auth_ssf}$.)
$.by $j ($v/$Z)$?r with $r$. id $i$?{tls_version}
(version=${tls_version} cipher=${cipher} bits=${cipher_bits} verify=${verify})$.$?u
for $u; $|;
$.$b
H?D?Resent-Date: $a
H?D?Date: $a
H?F?Resent-From: $?x$x <$g>$|$g$.
H?F?From: $?x$x <$g>$|$g$.
H?x?Full-Name: $x
# HPosted-Date: $a
# H?l?Received-Date: $b
H?M?Resent-Message-Id: <$t.$i@$j>
H?M?Message-Id: <$t.$i@$j>

#
重写规则:这部分有一套复杂的规则用来处理sendmail服务器,这些规则涵盖了转换地址和处理本地主机名等内容,不能随意更改。
######################################################################
######################################################################
#####
##### REWRITING RULES
#####
######################################################################
######################################################################


以下是邮件程序定义:
一般情况下,没有必要修改这个选项。
Mlocal定义用于将邮件传送到本地帐号。procmail MDA用于把邮件放到本地用户的邮箱。
Mlocal, P=/usr/bin/procmail, F=lsDFMAw5:/|@qSPfhn9, S=EnvFromL/HdrFromL, R=EnvToL/HdrToL,
T=DNS/RFC822/X-Unix,
A=procmail -t -Y -a $h -d $u
Mprog, P=/usr/sbin/smrsh, F=lsDFMoqeu9, S=EnvFromL/HdrFromL, R=EnvToL/HdrToL, D=$z:/,
T=X-Unix/X-Unix/X-Unix,
A=smrsh -c $u
原文来自:http://www.linuxsir.org/bbs/showthread.php?t=179915