搭建Sendmail邮件系统
1 ☆邮件系统
电子邮件系统的工作原理
电子邮件系统的运作方式与其它的网络应用有着根本上的不同。在其它的绝大多数的网络应用中,网络协议直接负责将数据发送到目的
地。而在电子邮件系统中,发送者并不等待发送工作完成,而是仅仅将要发送的内容发送出去。
电子邮件的协议标准是TCP/IP协议族的一部分。它规定了电子邮件的格式和在邮局间交换电子邮件的协议。
每个电子邮件都分为两部分:邮件头和邮件内容。TCP/IP对电子邮件的邮件头的格式作了确切的规定,而将邮件内容的格式让用户自定义。
在邮件头中最重要的两个组成部分就是发送者和接收者的电子邮件地址。
电子邮件地址的格式如下:
用户名@电子邮局域名 例:abc@990.net
电子邮件的传输协议(也就是在邮局间交换电子邮件的协议)主要有SMTP(简单邮件传输协议)、POP(电子邮局协议),以及现在新兴的IMAP(互联网邮件应用协议)。
整个电子邮件应用系统由两大部分构成:
1. 电子邮局系统;
电子邮局行使着像传统邮局的功能,它在发送者和接收者之间起着一个桥梁作用。它是运行在电子邮局服务器上的一个服务器端程序。
最常用的有Microsoft的IIS和sendmail等。
2. 电子邮件发送、接收系统。
电子邮件发送、接收系统则象遍及千家万户的邮箱,发送者和接收者通过它将邮件从电脑中发送和接收邮件。这个部分是一个运行在电
脑中的客户端程序,最常用的有Microsoft的Outlook Express,Netscape,The Bat,Foxmail,方正飞扬等。
有3种可提供的邮件服务
MTA(Message Transfer Agent):消息传输代理(发送邮件服务器) sendmail, postfix, qmail
MDA (Mail Delivery Agents):邮件传递代理(邮件处理器) procmail, maildrop
MUA (Mail User Agent):邮件用户代理(邮件客户端上运行的程序) Mozilla, elm
☆邮件服务器
邮件服务器是电子邮件系统的核心构件,它的主要功能是发送和接收邮件,同时向发件人报告邮件的传送情况。根据用途的不同,可以将
邮件服务器分为发送邮件服务器(SMTP服务器)和接收邮件服务器(POP3服务器或IMAP4服务器)。
sendmail和postfix。您可以选择任何一个MTA
Sendmail并不处理最终的投递,当然也不会处理如何把邮件提交给最终用户这样的任务。一般来说,我们总是在Windows客户机器上处
理各种电子邮件,因此需要一个服务程序负责将sendmail存储的邮件转交给Windows或其他任何客户机器。有两种基本的方法,一种是
将邮件传送到客户的本地机器上处理,这是通过所谓的邮局协议实现的;另一种是允许用户远程操作其邮箱并且实现对邮件的浏览和管理,
这是通过所谓的IMAP协议。
2 ☆SMTP协议
SMTP即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,就可以把Email寄到收件人的服务器上了。SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件。
3 ☆POP3协议
POP3即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的协议。它是Internet电子邮件的第一个离线协议标准,POP3允许从服务器上把邮件存储到本地主机即自己的计算机上,同时删除保存在邮件服务器上的邮件。遵循POP3协议来接收电子邮件的服务器是POP3服务器。
4 ☆IMAP4协议
IMAP4即Internet信息访问协议的第4个版本,是用于从本地服务器上访问电子邮件的协议,它是一个客户/服务器模型协议,用户的电子邮件由服务器负责接收保存,用户可以通过浏览信件头来决定是否要下载此信。用户也可以在服务器上创建或更改文件夹或邮箱,删除信件或检索信件的特定部分。
5 ☆POP和IMAP差异
虽然POP和IMAP都是处理接收邮件的,但两者在机制上却有所不同。在用户访问电子邮件时,IMAP4需要持续访问服务器,POP3则是将信件保存在服务器上,当用户阅读信件时,所有内容都会被立即下载到用户的机器上。因此,可以把IMAP4看成是一个远程文件服务器,而把POP看成是一个存储转发服务器。就目前情况看,POP3的应用远比IMAP4广泛得多。
6 ☆mail
使用权限:所有使用者
使用方式:mail [-iInv] [-s subject] [-c cc-addr] [-b bcc-addr] user1 [user 2 ...]
说明:
mail 不仅只是一个指令, mail 还是一个电子邮件程式,不过利用 mail 来读信的人应该很少吧!对于系统管理者来说 mail 就很有用,因为管理者可以用 mail 写成 script ,定期寄一些备忘录提醒系统的使用者。
参数:
i 忽略 tty 的中断讯号。 (interrupt)
I 强迫设成互动模式。 (Interactive)
v 列印出讯息,例如送信的地点、状态等等。 (verbose)
n 不读入 mail.rc 设定档。
s 邮件标题。
c cc 邮件地址。
b bcc 邮件地址。
将信件送给一个或以上的电子邮件地址,由于没有加入其他的选项,使用者必须输入标题与信件的内容等。而 user2 没有主机位置,就会送给邮件伺服器的 user2 使用者。
mail user1@email.address
mail user1@email.address user2
将 mail.txt 的内容寄给 user2 同时 cc 给 user1 。如果将这一行指令设成 crontab 就可以定时将备忘录寄给系统使用者。
mail -s 标题 -c user1 user2 < mail.txt
mail 查看/var/spool/mail/目录下自已邮箱内容(每个用户会有一个文件保存自己所有文件)。以q退出把看过的邮件保存在~/mbox文件中。
mail test@panda.com 直接发邮件给人。
mail -s 'title text' test@panda.com < mail.txt 把文档中内容邮寄出去。
mail -f ~/mbox 查看home目录下邮箱内容。
7 ☆uuencode/uudecode
用mail发附件也是可行,要用到uuencode and uudecode命令进行编码。
编码:uuencode [file] name
uuencode hello >hello.uue
default input is stdin;se
default output is stdout.
解码:uudecode [-o outfile] name
uudecode hello.uue
可以用-o选项输出另外一个文件名。
# uuencode ~/.bashrc -o bashrc | mail -s 'test uuencode' test@panda.com
8 ☆system-switch-mail
切换sendmail和postfix
9 ☆sendmail
sendmail提供SMTP服务
10 ☆sendmail安装
如果你在安装RHEL5的时候,选择了E-MAIL服务,sendmail就已经安装在LINUX系统中了,并且已经作了一些最基本的设置。
sendmail-8.13.8-2.el5.i386.rpm (第一张光盘,默认已装) sendmail软件包是sendmail服务器程序的安装包,是最重要的软件包.
m4-1.4.5-3.el5.1.i386.rpm (第一张光盘,默认已装)m4软件包中包括了配置sendmail服务器的必要工具.
procmail-3.22-17.1.i386.rpm (第一张光盘,默认已装)
sendmail-cf-8.13.8-2.el5.i386.rpm (第二张光盘,默认未装) sendmail-cf软件包中包括了重新配置sendmail服务器的必要配置文件.
sendmail-doc-8.13.8-2.el5.i386.rpm (第三张光盘,默认未装) sendmail-doc软件包中包括了sendmail服务器的说明文档.
sendmail-devel-8.13.8-2.el5.i386.rpm (第三张光盘,默认未装)
管理员需要手动安装以下两个包,才能配置sendmail服务器:#rpm -ivh sendmail-cf-8.13.8-2.el5.i386.rpm sendmail-doc-8.13.8-2.el5.i386.rpm
设置运行级别:#chkconfig --level 35 sendmail on
11 ☆sendmail使用前配置
sendmail的DNS设置
当sendmail程序得到一封待发送的邮件的时候,它需要根据目标地址确定将信件投递给那一个服务器,这是通过DNS服务实现的。例如,有一封邮件的目标地址是panda@panda.com,那么,sendmail首先确定这个地址是用户名(panda)+机器名(panda.com)的格式,然后,通过查询DNS来确定需要把信件投递给某个服务器。
先用ifconfig查看服务器的ip,再把ip写入:
#vi /etc/resolv.conf
; generated by /sbin/dhclient-script
search panda.com
nameserver 192.168.152.128
确认/etc/hosts,
#vi /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 panda.panda.com panda panda
然后在/etc/named.conf中加入
zone "panda.com" IN {
type master;
file "panda.com.zone";
};
最后生成/var/named/chroot/var/named/panda.com.zone
$TTL 86400
@ IN SOA panda.panda.com. root.panda.panda.com. (
2006062700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS panda
IN MX 10 panda
panda IN A 192.168.152.128
重启DNS.#service named restart
DNS数据中,与电子邮件相关的是MX记录,这可以在查询DNS时设置查询类型为mx来得 到:
[root@panda ~]# nslookup
> panda.panda.com
Server: 192.168.152.128
Address: 192.168.152.128#53
Name: panda.panda.com
Address: 192.168.152.128
> set q=mx
> panda.com
Server: 192.168.152.128
Address: 192.168.152.128#53
panda.com mail exchanger = 10 panda.panda.com.
在一般的情况下,mx交换器会自动把信件内容转交给目标主机,不过,也存在这样的情况 ,目标主机(比如panda.com)可能并不存在,或者不执行smtp服务,而是由其mx交换器来执行信件的管理,这时候,最终的信件将保存在mx机器上,直到用户来察看它。
如果DNS查询无法找出对某个地址的MX记录(通常因为对方没有信件交换主机),那么sendmail将是试图直接与对方的主机(来自邮件地址)对话并且发送邮件。例如,test@china.com在DNS中没有对应的MX记录,因此sendmail在确定MX交换器失败后,将从DNS取得对方的IP地址并直接和对方对话试图发送邮件。
sendmail发送邮件时,如果经过设定的时间后仍然未能将信件投递到目的主机,它将返回一个错误信息并且休息一段时间,然后重新试图投递,如果连续多次失败,sendmail最终将放弃投递并将错误信息投递给postmaster用户。在许多机器上,postmaster用户是root用户的一个别名(参考下面关于别名的内容),你应该将它设置为邮件的实际管理员的用户名。
例如,你可能会用mail程序向某个地址这样发信:
$mail someone@somedomain.com
To:other@otherdomain.com
Subject:test mail
test
someone@somedomain.com 必须准确到某台主机上
那么,当sendmail发信的时候,它是向someone@somedomain.com发信而不是other@otherdomain.com。相应地,如果你想向两个人发信,例如你在outlook里面写上:"投递给user1@a.com,抄送user2@b.com",那么sendmail应该怎么做?直接同时向两个地址发信吗?否,它试图构造两个包装(称为信封),每个包装上只列出一个投递地址,各投递一次。虽然邮件正文的头部仍然包含两个地址,但是sendmail不会看它。
配置文件
/etc/sysconfig/sendmail
DAEMON=yes
QUEUE=1h
每一个小时传递队列中的文件
12 ☆sendmail防火墙
iptables -I INPUT -p tcp --dport 25 -j ACCEPT
13 ☆sendmail启动
启动用:
#service sendmail start ;#/etc/init.d/sendmail start;
或 # sendmail -bd -q30m该命令以后台进程方式(-bd)运行,并使其每隔30分钟(-q30m)轮询一次未发送邮件队列,检查是否有新邮件。-q1h表示每隔一个小时发送一次邮件
停止用:
#service sendmail stop;#/etc/init.d/sendmail stop;#service sendmail restart ;
14 ☆sendmail主要配置文件
#ls /etc/mail/
access helpfile Makefile submit.mc
access.db local-host-names sendmail.cf trusted-users
domaintable mailertable sendmail.mc virtusertable
domaintable.db mailertable.db submit.cf virtusertable.db
#ls /etc/aliases*
/etc/aliases /etc/aliases.db
在/etc/mail目录中保存了sendmail服务器使用的所有配置文件,文件后缀是".cf"的是服务器配置文件,文件后缀是".db"的是服务器使用的数据库文件,下面是常用的文件说明:
配置文件sendmail.cf和sendmail.mc
sendmail服务器的主配置文件是sendmail.cf,该文件的格式是公认的难于理解,因此即使是有经验的管理员也会避免直接编辑此文件,sendmail开发人员为
sendmail管理者提供了更加容易理解和配置的sendmail.mc文件。一般情况下,系统管理员对sendmail.mc文件的内容进行设置后,再使用m4命令由
sendmail.mc文件的内容生成sendmail.cf文件。但由于sendmail.mc文件的配置依然有一定的难度,因此在第一次对sendmail.mc文件进行修改前,最好先将
该文件进行备份,以便配置错误时能够恢复默认配置,操作流程如下:
#cd /etc/mail (进入主配置文件目录)
#cp sendmail.mc sendmail.mc- (备份配置文件sendmail.mc)
#vi sendmail.mc (编缉配置文件sendmail.mc)
#m4 sendmail.mc > sendmail.cf (利用m4命令重新生成主配置文件sendmail.cf)
#service sendmail restart (重启sendmail服务使配置生效)
注意:sendmail服务器在运行时只读取sendmail.cf文件中的设置,因此每次对sendmail.mc文件进行修改后都需要使用m4命令生成新的sendmail.cf文件,
而且m4命令必须在/etc/mail/目录中执行。
数据库配置文件和数据库文件
在sendmail服务器中除了sendmail.cf主配置文件以外,还使用了许多数据库文件辅助进行sendmail服务器的配置。在/etc/mail目录中所有扩展名为".db" 的
文件都是数据库文件,这些数据库文件的格式对于用户是不可读的。每个".db"数据库文件在同一目录下都对应有同名的无扩展名文件,例如对于access.db
文件,对应有名为access的文本文件,access文件是用于系统管理员进行管理的,称为数据库配置文件。当管理员在数据库配置文件(文本文件)中进行了相
应的设置后,需要使用makemap命令将数据库配置文件生成".db"的数据库文件,因为sendmail服务器只能够识别".db"的数据库文件中的配置内容。操
作流程如下:
#cd /etc/mail (进入数据库文件目录)
#vi access (编辑数据库配置文件)
#makemap hash access.db <access (用makemap命令重新生成数据库文件)
#service sendmail restart (重启sendmail服务让配置生效)
☆sendmail.mc
sendmail.mc文件中指令的意义:
指令 |
意义 |
divert (-1) |
删除结果文件中的垃圾 |
divert (0) |
保存通常的配置文件 |
Dnl |
注解 |
Include |
包含一个文件 |
define arg1 arg2 |
定义宏arg1设置为arg2 |
undefine arg1 |
取消arg1的定义 |
OSTYPE ('Linux') |
定义操作系统类型 |
FEATURE |
功能选项,对应/usr/lib/sendmail-cf/feature里定义的文件名称 |
MAILER |
定义所有必要的邮件投递代理程序 |
ASQUERADE_AS |
用来处理多主机名称问题 |
divert(-1)dnl
dnl #
dnl # This is the sendmail macro config file for m4. If you make changes to
dnl # /etc/mail/sendmail.mc, you will need to regenerate the
dnl # /etc/mail/sendmail.cf file by confirming that the sendmail-cf package is
dnl # installed and then performing a
dnl # make -C /etc/mail
include(`/usr/share/sendmail-cf/m4/cf.m4')dnl
VERSIONID(`setup for linux')dnl
OSTYPE(`linux')dnl //设定使用的操作系统类别
dnl # Do not advertize sendmail version.
dnl define(`confSMTP_LOGIN_MSG', `$j Sendmail; $b')dnl
dnl # default logging level is 9, you might want to set it higher to
dnl # debug the configuration
dnl define(`confLOG_LEVEL', `9')dnl
dnl # Uncomment and edit the following line if your outgoing mail needs to
dnl # be sent out through an external mail server:
dnl define(`SMART_HOST', `smtp.your.provider')dnl
define(`confDEF_USER_ID', ``8:12'')dnl
dnl define(`confAUTO_REBUILD')dnl
define(`confTO_CONNECT', `1m')dnl
define(`confTRY_NULL_MX_LIST', `True')dnl
define(`confDONT_PROBE_INTERFACES', `True')dnl
define(`PROCMAIL_MAILER_PATH', `/usr/bin/procmail')dnl
define(`ALIAS_FILE', `/etc/aliases')dnl
define(`STATUS_FILE', `/var/log/mail/statistics')dnl
define(`UUCP_MAILER_MAX', `2000000')dnl
define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl
define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl
define(`confAUTH_OPTIONS', `A')dnl
dnl # The following allows relaying if the user authenticates, and disallows
dnl # plaintext authentication (PLAIN/LOGIN) on non-TLS links
dnl define(`confAUTH_OPTIONS', `A p')dnl
dnl # PLAIN is the preferred plaintext authentication method and used by
dnl # Mozilla Mail and Evolution, though Outlook Express and other MUAs do
dnl # use LOGIN. Other mechanisms should be used if the connection is not
dnl # guaranteed secure.
dnl # Please remember that saslauthd needs to be running for AUTH.
ddnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl # Rudimentary information on creating certificates for sendmail TLS:
dnl # cd /usr/share/ssl/certs; make sendmail.pem
dnl # Complete usage:
dnl # make -C /usr/share/ssl/certs usage
dnl define(`confCACERT_PATH', `/etc/pki/tls/certs')dnl
dnl define(`confCACERT', `/etc/pki/tls/certs/ca-bundle.crt')dnl
dnl define(`confSERVER_CERT', `/etc/pki/tls/certs/sendmail.pem')dnl
dnl define(`confSERVER_KEY', `/etc/pki/tls/certs/sendmail.pem')dnl
dnl # This allows sendmail to use a keyfile that is shared with OpenLDAP's
dnl # slapd, which requires the file to be readble by group ldap
dnl define(`confDONT_BLAME_SENDMAIL', `groupreadablekeyfile')dnl
dnl define(`confTO_QUEUEWARN', `4h')dnl
dnl define(`confTO_QUEUERETURN', `5d')dnl
dnl define(`confQUEUE_LA', `12')dnl
dnl define(`confREFUSE_LA', `18')dnl
define(`confTO_IDENT', `0')dnl
dnl FEATURE(delay_checks)dnl
FEATURE(`no_default_msa', `dnl')dnl
FEATURE(`smrsh', `/usr/sbin/smrsh')dnl
FEATURE(`mailertable', `hash -o /etc/mail/mailertable.db')dnl
FEATURE(`virtusertable', `hash -o /etc/mail/virtusertable.db')dnl
FEATURE(redirect)dnl
FEATURE(always_add_domain)dnl
FEATURE(use_cw_file)dnl
FEATURE(use_ct_file)dnl
dnl # The following limits the number of processes sendmail can fork to accept
dnl # incoming messages or process its message queues to 20.) sendmail refuses
dnl # to accept connections once it has reached its quota of child processes.
dnl define(`confMAX_DAEMON_CHILDREN', `20')dnl
dnl # Limits the number of new connections per second. This caps the overhead
dnl # incurred due to forking new sendmail processes. May be useful against
dnl # DoS attacks or barrages of spam. (As mentioned below, a per-IP address
dnl # limit would be useful but is not available as an option at this writing.)
dnl define(`confCONNECTION_RATE_THROTTLE', `3')dnl
dnl # The -t option will retry delivery if e.g. the user runs over his quota.
FEATURE(local_procmail, `', `procmail -t -Y -a $h -d $u')dnl
FEATURE(`access_db', `hash -T<TMPF> -o /etc/mail/access.db')dnl
FEATURE(`blacklist_recipients')dnl //允许使用黑名单查禁收件人。因此用户可以在access文件中设定黑名单。
EXPOSED_USER(`root')dnl
dnl # For using Cyrus-IMAPd as POP3/IMAP server through LMTP delivery uncomment
dnl # the following 2 definitions and activate below in the MAILER section the
dnl # cyrusv2 mailer.
dnl define(`confLOCAL_MAILER', `cyrusv2')dnl
dnl define(`CYRUSV2_MAILER_ARGS', `FILE /var/lib/imap/socket/lmtp')dnl
dnl # The following causes sendmail to only listen on the IPv4 loopback address
dnl # 127.0.0.1 and not on any other network devices. Remove the loopback
dnl # address restriction to accept email from the internet or intranet.
DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
dnl # The following causes sendmail to additionally listen to port 587 for
dnl # mail from MUAs that authenticate. Roaming users who can't reach their
dnl # preferred sendmail daemon due to port 25 being blocked or redirected find
dnl # this useful.
dnl DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl
dnl # The following causes sendmail to additionally listen to port 465, but
dnl # starting immediately in TLS mode upon connecting. Port 25 or 587 followed
dnl # by STARTTLS is preferred, but roaming clients using Outlook Express can't
dnl # do STARTTLS on ports other than 25. Mozilla Mail can ONLY use STARTTLS
dnl # and doesn't support the deprecated smtps; Evolution <1.1.1 uses smtps
dnl # when SSL is enabled-- STARTTLS support is available in version 1.1.1.
dnl # For this to work your OpenSSL certificates must be configured.
dnl #
dnl DAEMON_OPTIONS(`Port=smtps, Name=TLSMTA, M=s')dnl
dnl # The following causes sendmail to additionally listen on the IPv6 loopback
dnl # device. Remove the loopback address restriction listen to the network.
dnl DAEMON_OPTIONS(`port=smtp,Addr=::1, Name=MTA-v6, Family=inet6')dnl
dnl # enable both ipv6 and ipv4 in sendmail:
dnl DAEMON_OPTIONS(`Name=MTA-v4, Family=inet, Name=MTA-v6, Family=inet6')
dnl # We strongly recommend not accepting unresolvable domains if you want to
dnl # protect yourself from spam. However, the laptop and users on computers
dnl # that do not have 24x7 DNS do need this.
FEATURE(`accept_unresolvable_domains')dnl //接受无法反向解析的域来的邮件
dnl FEATURE(`relay_based_on_MX')dnl //自动接受DNS中MX记录来源的邮件转发
dnl # Also accept email sent to "localhost.localdomain" as local email.
LOCAL_DOMAIN(`localhost.localdomain')dnl
dnl # The following example makes mail from this host and any additional
dnl # specified domains appear to be sent from mydomain.com
dnl MASQUERADE_AS(`mydomain.com')dnl
dnl # masquerade not just the headers, but the envelope as well
dnl FEATURE(masquerade_envelope)dnl
dnl # masquerade not just @mydomainalias.com, but @*.mydomainalias.com as well
dnl FEATURE(masquerade_entire_domain)dnl
dnl MASQUERADE_DOMAIN(localhost)dnl
dnl MASQUERADE_DOMAIN(localhost.localdomain)dnl
dnl MASQUERADE_DOMAIN(mydomainalias.com)dnl
dnl MASQUERADE_DOMAIN(mydomain.lan)dnl
MAILER(smtp)dnl
MAILER(procmail)dnl
dnl MAILER(cyrusv2)dnl
☆mc语法
一个mc模板文件通常可以包含几个段落:
注意里面的正反引号,而且不能随便加入空格。
sendmail宏定义说明
divert(n) 为m4定义一个缓冲动作,当n=-1时缓冲被删除,n=0时开始一个新缓冲
OSTYPE 定义宏所使用的操作系统,该宏允许m4程序增加同相关操作系统相关的文件
Domain 定义MTA将使用哪些域来传输邮件
Feature 定义配置文件中使用的一个特定的功能集
Define 定义配置文件中的一个特定的选项值
MASQUERADE_AS 定义sendmail来应答邮件的其它主机名
MAILER 定义sendmail使用的邮件传输方法
dnl 注释
divert
通常总是设置为divert(-1)让m4在输出中去掉一些垃圾。
OSTYPE OSTYPE
定义使用的操作系统类型,当然在我们的情况下就是linux,但是一定要注意m4程序中引号的用法,一个反引号和一个正引号才代表把对应的东西括起来。
define
定义一些全局设置,对于Linux系统,设置了OSTYPE之后,可以定义下面的一些全局 参数,如果不定义,就使用缺省值。例如:
define(ALIAS_FILE,/etc/aliases)
变量名 说明(方括号中为缺省值)
ALIAS_FILE [/etc/aliases]
别名文件的位置。如果有多个别名文件,需要把它们用引号括起来(别忘了引号规则 !)。
confCR_FILE [/etc/mail/relay-domains]
缺省的域定义文件,在这个域中定义的域中机器可以通过你的服务器进行邮件发送。