sendmail配置

sendmail配置
sendmail配置

用Linux作邮件服务器

2008-07-28 17:30:31

在Internet上,E-mail是用户之间交往沟通的最佳方式。通过电子邮件,可以为Linux 系统开拓新的空间,增强与外界的联系。已经证明,电子邮件是Internet上使用最多的应用程序,甚至比WWW的使用还要多。本章介绍如何为Linux系统安装、配置E-mail软件。

1 Linux E-mail软件简介

Linux中的E-mail软件系统分为两大类:MUA(邮件用户代理)和MTA(邮件传送代理)。MUA的功能是为用户提供读写邮件的界面,而MTA的作用则是处理邮件的收发工作。换言之,用户可以通过MUA写信、读信,利用MTA收信、发信。

最常用的电子邮件MTA系统是sendmail,它由加州大学开发,其最新版本是8.9;另一个常见的MTA程序是smail,它由Curt Noll和Ronald Karr联合开发,也已经发布了几个版本。

值得注意的是,与其他大型软件包一样,sendmail也有自己的一些缺陷。虽然引起sendmail失败或系统崩溃的错误已基本上被排除,但提供root访问权限的安全性漏洞仍然时有发现。如果配置不当,sendmail有可能为“黑客”提供可乘之机。为了安全起见,用户最好定期访问计算机紧急反应小组(CERT,www.cert.org)的网页,加入它的邮递列表,或者阅读由它主持的网络讨论组(conp.security.announce)来了解由它发出的安全性通知。

电子邮件的MUA系统目前很多,大约有十几种,其中最常见是:mail和elm。

2 sendmail及其配置

本节介绍如何安装和配置sendmail程序,不过在开始深入研究这些详细内容之前,先介绍SMTP协议以及域名系统(DNS)对E-mail在Internet上传输的影响。

2.1 SMTP

SMTP是简单邮件传输协议的简称,是Internet上传输邮件的既定标准方式。sendmail 的基础协议正是SMTP。sendmail程序提供为Linux支持SMTP连接所需的服务。

要了解sendmail所做的各种不同工作,需要掌握有关互联网协议的一些知识。所谓协议就是硬件和软件进行通信所遵守的标准。协议通常分为不同的层次,高层的协议利用低层的协议作为基础。例如,互联网协议(IP)在网络之间发送和接受数据包,但不必创建诸如

SMTP和其他高层协议所使用的端到端(PPP)的连接;建立在IP之上的传输控制协议(TCP)提供了被Telnet和SMTP程序所使用的面向连接的服务;总而言之,TCP/IP为互联网提供了基本的网络服务,例如文件传输协议(FTP)和SMTP的高层协议,都建立在TCP/IP之上。协议分层的优点在于,执行SMTP或FTP协议的程序不必知道与传送数据包和连接其他主机有关的任何内容,因为它们可以使用TCP/IP提供的服务来完成。即执行高层协议的程序不必关心低层协议的具体细节。

SMTP定义了在互联网上交换E-mail的方式,因此软件版本和硬件环境对交换邮件的程序来说并不重要,只要这两个程序都正确地执行SMTP协议,它们就可以交换邮件。

下面介绍一个使用的SMTP协议的例子:位于https://www.360docs.net/doc/f52011369.html,的用户li正在向位于https://www.360docs.net/doc/f52011369.html,的zhang发送邮件。

以下为引用的内容:

$ sendmail-v zhang@https://www.360docs.net/doc/f52011369.html,

zhang@https://www.360docs.net/doc/f52011369.html,...Connecting to https://www.360docs.net/doc/f52011369.html, via top...

Trying 123.45.67.1...connected

https://www.360docs.net/doc/f52011369.html, SMTP ready at Sun,14 Nov 1999 18:56:22-0500

220 ESMTP spoken here

>>>HELO https://www.360docs.net/doc/f52011369.html,

250 https://www.360docs.net/doc/f52011369.html, Hello https://www.360docs.net/doc/f52011369.html, [123.45.67.2],pleased to meet you

>>>MAIL From:〈li@https://www.360docs.net/doc/f52011369.html,〉

250〈li@https://www.360docs.net/doc/f52011369.html,...Sender ok

>>>RCPT To:〈zhang@https://www.360docs.net/doc/f52011369.html,〉

250〈zhang@https://www.360docs.net/doc/f52011369.html,)...Recipient ok

>>>DATA

354 Enter mail,end with"." on a line by itself

>>>.

250 SAA08680 Message accepted for delivery

>>>QUIT

221 https://www.360docs.net/doc/f52011369.html, closing connection

zhang@https://www.360docs.net/doc/f52011369.html,...Sent

S

上面的第一行是直接调用Sendmail的一种命令格式,而不是利用用户所喜欢的邮件用户代理MUA(例如elm或mail)来执行这一任务。这里-v选项告诉sendmail使用冗余模式显示SMTP对话。其余行显示的是SMTP客户机和服务器进行的交谈。以>>>开始的行表示的是位于https://www.360docs.net/doc/f52011369.html,处的客户机(寄件人),紧跟其后的行是位于https://www.360docs.net/doc/f52011369.html, 处的服务器(收件人)的答复。以220开始的第一行是最初连接之后SMTP服务器对自己进行的声明,它给出了自己的主机名以及日期和时间;第二行用来告诉客户机该服务器能够

理解扩充的SMTP协议(ESMTP),以便客户能够使用它。像220这样的号码是SMTP客户机同SMTP服务器用来通信的回复代码,跟随回复代码后面的文本才是真正的内容。

如果想对这一对话有更深刻的了解,可以阅读参考文献RFC821。以-v选项运行sendmail有助于用户理解SMTP对话的工作方式。

像https://www.360docs.net/doc/f52011369.html,这样的名字对于用户理解和记忆是十分方便,而计算机采用的却是像123.45.67.1这样的数字化的IP地址。幸运的是,域名系统(DNS)提供了主机名到IP地址的转化以及其他的重要信息。用户没有必要记忆主机的IP地址。

DNS把对主机进行命名和编号的权限分配给自治管理的域,例如,一个称为otherdomain. com的公司可以维护自己域中主机的所有信息。当主机https://www.360docs.net/doc/f52011369.html, 想发送邮件或远程登录(Telnet)到主机https://www.360docs.net/doc/f52011369.html,时,它会通过网络向https://www.360docs.net/doc/f52011369.html,的域名服务器发送一个请示,域名服务器不妨假设是主机

https://www.360docs.net/doc/f52011369.html,。域名服务器https://www.360docs.net/doc/f52011369.html,将把https://www.360docs.net/doc/f52011369.html,的IP地址(可能还有其他信息)返回给https://www.360docs.net/doc/f52011369.html,,这样邮件将被发送,或者Telnet将被连接。由于https://www.360docs.net/doc/f52011369.html,对https://www.360docs.net/doc/f52011369.html,域具有管理权,因此它能够回答对https://www.360docs.net/doc/f52011369.html,中的主机的任何查询,不管这些查询发自哪里;另外,它还有对域中的主机进行命名的权力。

现在,如果https://www.360docs.net/doc/f52011369.html,上的某人想给zhang@ https://www.360docs.net/doc/f52011369.html,发送邮件会怎么样呢?虽然https://www.360docs.net/doc/f52011369.html,没有位于https://www.360docs.net/doc/f52011369.html,域中的主机的有关信息,但是它却知道如何找到这一信息。当城名服务器收到它不具有此域信息的某个城中的主机的查询请示时,它便向根域名服务器(root nameserver)询问那个域中(在本例中是https://www.360docs.net/doc/f52011369.html,)具有管理权限的域名服务器的名字和IP地址。根域名服务器将把对https://www.360docs.net/doc/f52011369.html,具有管理权限的域名服务器的名字和IP地址提供给https://www.360docs.net/doc/f52011369.html,。https://www.360docs.net/doc/f52011369.html,域名服务器将询问它们并把回复转发给https://www.360docs.net/doc/f52011369.html,。

从上可知,DNS是一个包含主机名到IP地址映射的大型分布式数据库。另外,它还包含其他信息。当利用像。sendmail这样的程序投递邮件时,它必须把收件人的主机名转化为一个IP地址。这部分DNS数据被称为A(地址)记录,它是关于主机的最基本的数据。主机数据的另一部分是邮件交换器(MX)记录,像https://www.360docs.net/doc/f52011369.html,主机的MX记录列出的是能够为它接收邮件的一个或多个主机。

也许读者会问:MX记录的作用是什么?为什么https://www.360docs.net/doc/f52011369.html,不简单地接收它自己邮件并处理这一过程呢?

MX记录的作用如下:

(1)通过MX,不在Internet上的主机(例如,只利用UUCP的用户)能够指定一个Internet主机来接收它们的邮件,从而使它们看起来就像具有Internet地址一样。例如,假定a.

https://www.360docs.net/doc/f52011369.html,只是偶尔通过UUCP连接到https://www.360docs.net/doc/f52011369.html,。如果

https://www.360docs.net/doc/f52011369.html,为它发布一个MX记录,其他Internet主机就能够向它发送邮件。当https://www.360docs.net/doc/f52011369.html,收到邮件时,它把邮件保存起来,直到https://www.360docs.net/doc/f52011369.html,同它连接。MX记录能够使非Internet主机也可以接收来自Internet的E-mail。

(2)通过MX,使用仅有发送功能MUA客户程序的用户也能接受电于邮件。假设有一台充当一群PC机的文件服务器的UNIX主机https://www.360docs.net/doc/f52011369.html,。这些PC机都具有可以发送邮件但不能接收邮件的带有内置SATP客户程序的MUA。如果发往外地的邮件具有类似someone@https://www.360docs.net/doc/f52011369.html,的回复地址,那么接收方如何回复信件呢?通过MX记录,问题便迎刃而解:用https://www.360docs.net/doc/f52011369.html,做为所有PC机的MX主机,寄向它们的邮件都将正确到达。

(3)通过MX可以把用户的电子邮件存储起来。由于一些难以预料的原因,主机可能会长时间地离开Internet。虽然用户的主机离开了Internet,但发往它的邮件可能在其他主机上排队,当经过一段时间后邮件便返回给寄件人。如果用户的主机具有在中断时间里为它保存邮件的MX主机,那么在用户的主机重新启用后邮件将被投递。这些MX主机可以是站点内的(即在用户的域中),也可以是站点外的,或者两者都有。有条件的情况下,最好选择站点外的MX主机。因为某些事故通常会使用户的整个站点与网络断开,在这种情况下,站点内的MX主机也就毫无用处。

(4)MX记录能够隐藏信息并使用户更灵活地重新配置自己的局域网。

收邮件的主机被命名为https://www.360docs.net/doc/f52011369.html,还是https://www.360docs.net/doc/f52011369.html,并不重要,用户的通信者不会知道其中的差别。

当某个SMTP客户程序向某个主机投递邮件时,它并不只是把主机名转化为IP地址。客户程序首先查找MX记录。如果MX记录存在,它便按照记录中所提供的优先级对这些记录进行排序。例如,https://www.360docs.net/doc/f52011369.html,或许就具有MX记录,这些记录把主机

https://www.360docs.net/doc/f52011369.html,、https://www.360docs.net/doc/f52011369.html,和https://www.360docs.net/doc/f52011369.html,列为愿意为它们收邮件的主机。注意,“主机”https://www.360docs.net/doc/f52011369.html,除作为一个MX记录外可能并不存在,即它没有一个可用的IP地址。虽然这些主机中的任何一个都将为https://www.360docs.net/doc/f52011369.html,接受邮件,但MX的优先级确定了SMTP客户程序应首先尝试投递的主机。在这里,系统管理员实际上已经设置了一个主邮件服务器https://www.360docs.net/doc/f52011369.html,和一个站点内的备用邮件服务器https://www.360docs.net/doc/f52011369.html,,并且还与https://www.360docs.net/doc/f52011369.html,的管理员协商,把它作为站点外的一个备用邮件服务器。管理员通过设置MX的优先级,从而使SMTP客户程序将

首先试用主邮件代收器,其次是站点内的备用邮件服务器,最后是站点外的备用邮件服务器。

当收集和排序MX记录之后,SMTP客户程序把这些主机的IP地址聚集起来并按照它们的MX优先级的顺序向它们投递。当邮件传送出现问题时,应该清楚这样一个事实:若一封信被投递的地址是zhang@https://www.360docs.net/doc/f52011369.html,,这并不能说明主机。https://www.360docs.net/doc/f52011369.html,一定存在;即使这一主机存在,或许它也不是直接接收邮件的主机。

另外,很有必要了解邮件头和信封地址之间的差别,因为邮件路由器处理它们的方式是不同的。下面举例说明两者之间的差别。

假定某个用户有一个便笺想寄给一些同事,他们分别是A公司的li和qiu以及B公司的zhang和wang吧。用户把便笺的一个副本交给了用户所信任的邮件收发员xie,他记录了所有的收件人。xie是个非常精明的人,他想为用户的公司节省邮费,因此把便笺复印了两份,然后把每份放进一个写有各自公司地址的信封里(而不是给每个收件人都发送一个副本)。在发往A公司的信封的封面上,他写有h和qiu的名字;在发往B公司的信封的封面上,写有zhang和wang。当xie在A公司和B公司的的同行收到这两个信封时,他们对便笺进行了复印并把它们分别送给了li、qiu和zhang、wang,而并不查看在便笺里面写的地址。对于A公司和B公司的邮件收发员来说,他们所关心的只是信封地址。

上面的比喻说明了SMTP客户程序和服务程序的工作方式。假定

zhang@https://www.360docs.net/doc/f52011369.html,向他的同事li@https://www.360docs.net/doc/f52011369.html,和zeng@https://www.360docs.net/doc/f52011369.html,发送邮件,信头部的收件人名单如下:

To:li@https://www.360docs.net/doc/f52011369.html,,zeng@https://www.360docs.net/doc/f52011369.html,

如果https://www.360docs.net/doc/f52011369.html,的SMTP客户程序连接到。https://www.360docs.net/doc/f52011369.html,邮件发送器来投递zeng的副本,当它准备列出收件人(信封地址)时,它该怎么处理呢?如果像上面To:行(邮件头地址)那样列出两个收件人,li将收到信件的两个副本,因为https://www.360docs.net/doc/f52011369.html, 的邮件发送器将向https://www.360docs.net/doc/f52011369.html,转发一个副本。解决这一问题的方法是:https://www.360docs.net/doc/f52011369.html,的SMTP客户程序把信件放在一个信封里,在此信封只包含一个主机上的收件人姓名,虽然所有收件人的名单仍然在信件的头部,但他们在信封之内,因此位于https://www.360docs.net/doc/f52011369.html,和https://www.360docs.net/doc/f52011369.html,处的SMTP服务程序也就看不到他们。在本例中,寄往https://www.360docs.net/doc/f52011369.html,的信封将只列出zeng,寄往https://www.360docs.net/doc/f52011369.html,的信封将只列出li。

别名是说明邮件头和信封地址不同的另一个例子。假定要把邮件发送到别名为friends 的人,friends包括的人名是Xie、zhang、li和qiu。在信中,用户写的是To:friends,然而。sendmail将扩展这一别名并构造一个包含所有收件人的信封。根据这些名字是否是别

名,是否有可能在其他主机上,最初的消息将被装进四个不同的信封并投递到四个不同的主机。在每个信封上将只包含一个收件人的姓名,但在信头中包含的却是同一个别名friends。

sendmail允许在命令行中指定收件人,假定有个名为letter的文件,其内容如下:

To:null recipient〈〉

Subject:To show the differebce between in header and envelope addresses

This is just a test for E-mail.

利用下面的命令发送这一信件:

$sendmail yourlogin〈letter

即使用户的注册名没有在信件的头部,用户(yourlogin)也将会收到这一信件。因为用户的地址在信封上。除非以别的方式(例如利用-t标志)说明,否则sendmail将根据命令行上指定的收件人构造信封地址,而且邮件头地址和信封地址并不一定要相同。

2.2 sendmail的安装与配置

首先,必须获取sendmail源代码并进行编译。接着,必须选择同用户的站点需求相接近的sendmail.cf文件并对它进行必要的修改。然后,测试sendmail和它的配置文件。最后,必须安装sendmail、sendmail.cf以及其他辅助文件。

上面所述的是基本步骤。但根据sendmail安装位置的不同,可能还需要修改系统登录脚本(/etc/init.d中的一个文件),从而使sendmail在系统引导下能够被正确地启动。此外,如果系统没有别名文件,还必须创建一个,别名文件通常被命名为/usr/lib/aliases或

/etc/mail/aliases(别名文件的位置将在sendmail.cf中用到,因此可以把它放在用户想放的任何地方)。需要注意的是,可能还需要对系统的DNS数据库进行修改。

1.获取源代码

RedHat 6.1配备的是sendmail-8.9.3,从https://www.360docs.net/doc/f52011369.html,站点上可以得到sendmail-8.9.3的RPM版本。sendmail的这一版本可以从http://https://www.360docs.net/doc/f52011369.html,站点得到,或者通过FTP从ftp://https://www.360docs.net/doc/f52011369.html,得到。

注意:下载文件的确切名字依据V8 sendmail当前版本的不同而不同,当前的最新是版本8.9.3。另外,由于文件是被打包压缩的,因此在传输它们之前必须为FTP提供binary

命令,即以二进制方式传输。还注意,应该使用自己完整的E-mail地址作为口令,例如username@https://www.360docs.net/doc/f52011369.html,。

2.解压源、解包并编译sendmail

在获得了源代码后,必须把它打开。由于它是一个被压缩的tar映像文件,因此必须对它进行解压,然后从tar档案中抽取各个文件。假定文件存放在目录/usr/local/src下面。

以下为引用的内容:

[root@lll src]# gzip -d sendmail-8.9.3.tar.gz

[root@lll src]# tar -xvf sendmail-8.9.3.tar

执行上述操作后,将产生子目录sendmail-8.9.3。接下来,运行cd和Is,查看这一源代码目录中有哪些文件:

[root@lll src]# cd sendmail-8.9.3/stc。

[root@lll src]# ls

Makefile collect.c macro.c parseaddr.c srvrsmtp.c

Makefiles conf.c mailp.0 pathnames.h stab.c

READ_ME conf.h mailp.1 queue.c stats.c

TRACEFLAGS convtime.c mailstats.h redcf.c sysexits.c

alias.c daemon.c main.c recipient.c sysexits.h

aliases deliver.c makesendmail safefile.c trace.c

aliases.0 domain.c map.c savemail.c udb.c

aliases.5 envelope.c mci.c sendmail.0 useful.h

arpadate.c err.c mime.c sendmail.8 usersmtp.c

cdefs.h headers.c newaliases.0 sendmail.h util.c

clock.c ldap_map.h newaliases.1 sendmail.hf version.c

现在可以准备编译sendmail了,但首先要阅读下面的文件,这些文件包含关于用户所下载的sendmail 版本的最新消息。

FAQ

RELEASE-NOTES

KNOWNBUGS

READ_ME

另外,还要注意doc/op子目录中的sendmail安装与操作指南(SIOG)。

sendmail的安装过程非常简单。要编译新的sendmail版本,运行下面的命令即可。

[root@lll src]# makesendmail

在RedHat 6.x的2.2内核上,sendmail在编译时不会出现任何警告或错误。如果使用光盘上的RPM 软件包文件,安装更简单。仅需执行下面的命令:

[root@lll src]# rpm-ivh sendmail-8_9_3.rpm

在安装新的sendmail时,一定要为被替换的所有文件创建一个备份,特别是原来的sendmail守护程序。如果新的sendmail不能正常工作,在排除新版本的故障时,将需要恢复原来的版本。

要安装新版本的sendmail,首先利用下面的命令停止当前运行的守护进程:

[root@lll src]#/etc/rc.d/init.d/sendmail.init stop

然后把新的二进制文件拷贝到sendmail的正确位置:

[root@lll src]# cp obj.Linux*/sendmail/usr/sbin/sendmail

另外,还必须把新的手册页文件拷贝到正确位置:

[root@lll src]# cp aliases.1/usr/man/man5/aliases.5

[root@lll src]# cp mailq.0/usr/man/man1/mailq.1

[root@lll src]# cp newaliases.0/usr/man/man1/newaliases.1

[root@lll src]# cp sendmail.0/usr/man/man8/sendmail.8

现在可以利用下面的命令重新启动新的sendmail守护进程:

[root@lll src]# /etc/rc.d/init.d/sendmail/init start

3.sendmail的别名文件

sendmail依靠许多辅助文件来执行它的工作。最重要的文件是别名文件和配置文件Sendmail.cf。如果打算把sendmail作为SMTP服务程序运行(大多数站点都这么做),则应该安装SMTP的帮助文件sendmail.hf。这就是关于文件sendmail.st和sendmail.hf所需说明的内容。其他辅助文件包含在sendmail的安装和操作指南(Sendmail Internet and Operating Guide,简称SIOG)中。

sendmail会检查收件人的地址是否为别名。例如,大部分Internet站点都设有一管理员地址Webmaster,遇到问题可以向他报告。然而大多数站点并没有这一名字的实际账号,而是把Webmaster的邮件转移到负责邮件管理的一个或几个人。例如,在假设的站点https://www.360docs.net/doc/f52011369.html,上,用户zhang和li共同负责网站管理,因此别名文件会具有下面一项内容:

Webmaster:zhang,li

这行代码告诉sendmail,寄向Webmaster的邮件将被改寄到用户名为zhang和li处。事实上,这些名字还可以是别名,例如:

Webmaster:firstgroup,secondgroup,thirdgroup

firstgroup:zhang,li

secondgroup:liu,deng

thirdgroup:qiu,wang

在所有这些例子中,别名的名字在冒号的左边,这些名字所代替的真实名字在冒号的右边。sendmail将反复地分析别名直到他们被解析为一个真正的用户或一个远程地址为止。在前面的例子中,要解析别名Webrmaster,sendmail首先把它扩展为收件人名单firstgroup、secondgroup和thirdgroup。然后进一步扩展这些别名中的每一个,从而得到最终的名单——zhang、li、liu、deng、qiu和wang。

需要指出的是,别名的右边可以指定为一个远程主机,但左边却不能。别名zhang:zhang@https://www.360docs.net/doc/f52011369.html,是合法的,而zhang@https://www.360docs.net/doc/f52011369.html,@https://www.360docs.net/doc/f52011369.html,是不合法的。

别名可用于创建邮递列表(mailing list)。在上面的例子中,别名Webmaster实际上就是一个本地邮件管理员的邮递列表。对于大型的或是经常改动的名单,可以利用:include 的别名形式指示sendmail从文件中来读取名单的成员。如果别名文件包含行

friends::include:/home/zhang/friends.aliases

并且文件/home/zhang/friends.aliases包含

zhang

li

liu

deng

其效果与下面的别名相同:friends:zhang,li,liu,deng

这一指令对于经常变动的邮递列表或哪些由用户而非邮件管理员管理的邮递列表非常方便。如果经常要求改变邮件别名,用户一般希望把它置于自己的控制之下。

别名文件也可被用于向某个程序发送邮件的内容。例如,许多邮递列表的设立使用户可以获取所列的信息或通过向某一特定地址list-request发送信件来订阅信息。这种信件的主体通常只包含一个单词,比如help或subscribe等。假设zhang的邮递列表具有名为zhang-request的一个地址:zhang-request:|/usr/local/lib/auto-zhang-reply

上面表达式的管道号(|)通知sendmail使用程序的邮件发送器,它通常被定义为

/bin/sh。sendmail将把信息提供给/usr/local/lib/auto-zhag-reply的标准输入,如果它存在,sendmail便考虑投递信件。

用户还可以创建一个使sendmail向文件发送邮件的别名。下面是别名nobody的一个例子,它在运行NFS的系统上是经常用到:nobody:/dev/null

指定文件的别名让sendmail把它的消息追加到被指定的文件中。由于这一特殊的文件/dev/null是Linux/UNIX的“黑洞”,因此这一别名的作用其实是把邮件清除掉。

4.配置sendmail

sendmail是通过sendmail.cf文件来配置的。这个文件通常在目录/etc下面(有些系统是在/etc/lib目录下)。sendmail.cf文件使用的语法与其他配置文件不同,而且比较复

杂。配置文件的每一行都以一个单一的命令字符开头,这一字符用来说明这一行的功能和语法。以#开始的行是注释行;空行被忽略;以空格或制表符开始的行是上一行的续行,不过通常应该尽量避免续行。

下面介绍命令字符及它们的功能。

以下为引用的内容:

(1)# 注释符,以#开始的行是注释行。例如:

# This file is a sample for sendmail.cf

(2)D 使用格式为:DX string。其功能是把宏X定义为字符串string,例如:

DM https://www.360docs.net/doc/f52011369.html,

(3)C 使用格式为:CX word1、word2。其功能是把类X定义为wor1、word2。例如:Cw localhost my_host

(4)F 使用格式为:FX/file。其功能是把类X定义为从文件中读取的值。例如:

Fw/etc/hosts

(5)H 使用格式为:H?mailerflag?name:template。其功能是定义邮件头。例如:H?F?From:\ $ q

(6)O 使用格式为:OX option arguments。其功能是设置选X,例如:

OL8# sets the log level to 8

(7)P 使用格式为:Pclass=n。其功能是根据邮件的类来设置邮件投递的优先级。例如:Pjunk=100

(8)V 使用格式为:Vn。其功能是把配置文件的版本级别通知给V8 sendmail。例如:V3

(9)K 使用格式为:Kname class arguments。其功能是定义一个关键字文件(数据库映像)。

例如:

Kuucphosts dbm/etc/uuphosts

(10)M 使用格式为:Mname,f1=v1,...。其功能是定义一个邮件发送器。例如:Mpop,P=/bin/sh,F=lsD,A=sh-c $ u

(11)S 使用格式为:Sun。其功能是开始一个新的规则集。例如:

S22

(12)R 使用格式为:Rlhs rhs comment。其功能是定义一个匹配/改写规则。例如:R $ + $>jg call ruleset jg

上面简要地列出操作符的类型,现在对它们进行详细介绍。

· D操作符

宏类似于shell变量,当为一个宏定义了值后,可以在配置文件的后面对它进行引用,宏将会被它的值所取代。例如,一个配置文件可能有多个行包含假设的邮件中心mailer.https://www.360docs.net/doc/f52011369.html,,为了避免一次次地输入这一名字,可以像下面这样为它定义一个宏R(代表中继邮件发送器):https://www.360docs.net/doc/f52011369.html,

当sendmail在sendmail.cf中遇到$ R时,sendmail将把它替换为字符串

https://www.360docs.net/doc/f52011369.html,。

宏的名字通常是一个单字符。sendmail定义有许多宏,这些宏不应该被再次定义,否则将会出现一些问题。sendmail使用小写字母来定义自己的宏;大写字母可以被自由地使用。

· C和F操作符

类与宏类似,但是在改写规则中用于不同目的。与宏一样,类的名字也是一个单字符,小写字母由sendmail使用,大写字母用于由用户定义的类。一个类包含有一个或多个单词。例如,可以像下面这样定义一个包含本地域中所有主机的类H:

CH host1 host2 host3

为了方便起见,大型的类可以续行定义。下面对类H的定义与前面定义的结果相同:CH host1

CH host2

CH host3

另外,还可以通过从某个文件中读取它的单词来定义一个类:

CF/usr/usr/localhosts

如果/usr/localhosts文件包含host1、host2和host3,并且是每行包含一个,那么这一定义与前面的两个定义等价。

使用宏和类最主要的优点是它们可以集中配置文件中信息。在上面的例子中,如果决定把邮件中心由https://www.360docs.net/doc/f52011369.html,改变为https://www.360docs.net/doc/f52011369.html,,只需要改变宏$ R

的定义就可以了,配置文件仅需作很少的改动。否则名字https://www.360docs.net/doc/f52011369.html,散布在文件的各处,那么可能会在某些位置忘记对它们进行修改。另外,集中的重要信息,可以在单独的一个位置详细地对它进行注释。由于配置文件一般比较难于理解,因此如果很长一段时间之后对自己所做的某种修改感到迷惑时,在配置文件中添加详细的注释是很有帮助的。

· H操作符

一般情况下,不需要对V8 sendmail的配置文件所提供的邮件头进行修改,因为它们已经遵从了公认的标准。下面是一些邮件头的示例:

H? D? Date:$ a

H? F? Resent-From:$ q

H? F? From:$ q

H? x? Full-Nnme:$ x

可以看出,在邮件头的定义中可以使用宏。当插入到某封信中时,这些宏将被扩充,由它相应的值取代。例如,在上面的例子中,用于邮件头定义Full-Name:中的宏$ x将被取代为寄件人的全名。在邮件头的定义中,可选的?mailerflag?结构用来通知sendmail只有在

被选择的邮件发送器具有这一邮件发送器标志时才插入邮件头。

假如在用户的本地邮件发送器的定义中具有一个标志Q,并且sendmail选择了这一邮件发送器来投递某一信件,如果配置文件包含一个像下面这样的邮件头定义,那么sendmail 将把这一邮件头插入到通过本地邮件发送器被传递的信件中,并利用相应的值来取代宏$ F:

H? Q? It-is-a-wonderful-day:$ F

为什么要使用?mailerflag这一特性呢?这是因为不同的协议可能会需要不同的邮件头。另外,由于它们也需要不同的邮件发送器,因此可以通过在邮件发送器定义中定义相应的邮件发送器标志并使用邮件头定义中的?mailerflag?结构,来通知sendmail是否要插入相应的邮件头。

·0操作符

sendmail具有许多选项,这些选项用来改变sendmail的操作或者用来通知所使用的文件的位置。大部分选项既可以通过命令行提供,也可以在配置文件中给出。例如,用户既可以在命令行也可以在配置文件中指定别名文件的位置;要是在命令行上指定别名文件,可以使用-o选项:

$ sendmail-oA/etc/aliases[other arguments...]

要是在配置文件指定别名文件,可在配置文件中添加如下一行代码:

OA/etc/aliases

这两种方法是等价的。但由于像别名文件的位置这种选项很少改变,因此人们通常在配置文件sendmail.cf中设置它们。V8 sendmail的所有选项在SIOG中有详细的说明。

·P操作符

用户可以在邮件中包含用来指示邮件的相对重要性的标题,sendmail可以根据这些标题来确定信件的优先级。假设为V8 sendmail提供的优先级如下:

Pemergent=100

Pimportant=0

Pnormal=-30

如果用户在他们的信息中含有标题Drecedence:normal,那么sendmail为这些邮件提供的优先级要低于利用标题Precedence:importangt的邮件。

·V操作符

随着V8 sendmail的发展,许多Linux爱好者不断地为它添加新的特性。V操作符能够使V8 sendmail知道在配置文件中它可以找到哪些特性。老版本的sendmail不能够识别这一命令。在SIOG中,对配置文件的版本级别有详细的说明。

注意:配置文件的版本级别与sendmail的版本级别并不是一回事。V8 sendmail能够理解从版本1到5的配置文件,而版本8的配置文件并不存在。

·K操作符

sendmail使用了一些关键字数据库,例如别名数据库。假如给定了关键词Webmaster,sendmail将查找与这一关键词相关的数据,V8 sendmail把这一概念扩充为任意的数据库,

包括NIS mps(Sun的网络信息服务,以前称为Yellow Pages或YP)。K操作符可用来向sendmail通知数据库的位置、类别以及访问方法。V8 sendmail支持的数据库类别有:dbm、btree、hash和NIS。当在Linux下编译时,使用的缺省类别是dbm格式。

· M操作符

前面已经介绍,邮件发送器或者是MTA或者是最终投递代理。针对每种目标,可以定义一个专门的邮件发送器。即使SMTP,MTA被内置,它也必须有一个邮件发送器定义来定制sendmail的SMTP操作。邮件发送器的定义是很重要的,因为所有收件人的地址必须在0号规则集中解析到一个邮件发送器。解析到本地邮件发送器将通过定义在其中的最终投递代理(例如/bin/mail)把信件发送给某个本地用户,解析到SMTP邮件发送器将通过定义在其中的sendmail固有的SMTP传输器把信件发送给另一个主机。下面将介绍一个定义邮件发送器的具体例子,由于sendmail需要一个本地邮件发送器,因此给出下面的例子:Mlocal,P=/bin/mail,F=lsDFMfSn,S=10,R=20,A=mail-d$u 所有邮件发送器的定义都以M操作符和邮件发送器的名字开头(在本例中是local),其他字段在后面并且分别由逗号隔开。每个字段由字段名和它的值组成,字段名和它的值之间由等号(=)隔开,允许使用的字段在SIOG中有详细的说明。在上面本地邮件发送器的定义中,P=用来提供投递邮件的程序所处位置的路径名/bin/mail,字段F=用来为本地邮件发送器提供sendmail标志。这些标志并不是要传递给字段P=中所指定的命令,而是由sendmail用来根据它所选择的邮件发送器来修改自己的操作。例如,sendmail通常在调用邮件发送器之前放弃它的超级用户身份,但可以利用S邮件发送器标志通知sendmail为某些邮件发送器保持这一身份。

字段S=和R=用来为sendmail指定在改写寄件人和收件人地址时用到的规则集。由于可以为所定义的每个邮件发送器提供不同的R=和S=标志,因此可以针对每个邮件发送器的不同特点来改写地址。例如,如果用户的UUCP邻居运行的是一个不理解域寻址的陈旧软件,就需要专门为他的站点说明一个特殊的邮件发送器,并编写针对特殊邮件发送器的规则集,从而把地址转化为它的邮件发送器能够理解的形式。S=和R=字段还可以指定用来改写信封和邮件头地址的各种规则集,像S=21/31这种表达式将通知sendmail利用21号规则集改写寄件人的信封地址,利用31号规则集改写寄件人的邮件头地址。这一功能对于要求不同地显示信封地址和邮件头地址的邮件发送器是很有用的。

A=字段用来为被运行的程序(在本例中是/bin/mail)提供变量向量(命令行)。在这一例子中,sendmail将运行命令mail-d $ u,其中的宏$ u将被替换为被投递的用户名:/bin/mail-d zhang

用户可以在命令提示符下把与此完全相同的命令输人到shell中。

另外,还可以使用其他邮件发送器标志来调节邮件发送器。例如,可以根据不同的邮件发送器限制信息的最大尺寸。

· S和R操作符

配置文件sendlnail.cf由一系列规则集组成。规则集用来探测错误的地址,把地址改写为远程邮件发送器能够理解的形式,以及把邮件路由到sendmail内部的某个邮件发送器。

sendmail按照固有的顺序向规则集传送地址,而规则集可以不按固有顺序调用其他规则集。固有顺序与处理的邮件地址以及选择用来投递信件的邮件发送器有关。

规则集由S命令宣布,跟在它后面的是用来标识规则集的编号。sendmail将收集下面的R(规则)行,直到它发现另一个S操作符或配置文件的结尾为止。下面的例子定义了编号为11的规则集:

#Ruleset 11

S11

R $+$:$>22$ I call ruleset 22

sendmail分三种途径来处理地址:一种用来选择投递代理,一种用来处理寄件人地址,一种用于处理收件人地址。

所有邮件地址首先被传送到3号规则集进行预处理从而变为规范的形式,以便其他规则集能够容易地处理它们。不论地址多么复杂,3号规则集的任务是确定某个邮件应该被发送到的下一个主机,3号规则集将尽力在地址中查找那一主机并利用尖括号来标记它。例如,在一种最简单的情况下,一个像zhang@somedomain.gov这样的地址将变为znahg<@https://www.360docs.net/doc/f52011369.html,>。接下来,0号规则集将确定用于每个收件人的正确的投递代理(邮件发送器)。例如,一封由li@othedomain.com发给zhang@https://www.360docs.net/doc/f52011369.html,(一个Internet 站点)和posthost!zhao(一个老式的UUCP站点)的信件需要两个不同的邮件发送器:一个用于https://www.360docs.net/doc/f52011369.html,的SMTP邮件发送器,一个用于posthost的老式UUCP邮件发送器。邮件发送器的选择决定以后对寄件和收件人的地址进行处理的方式。因为提供在“S=”和“R=”邮件发送器标志中的规则集根据邮件发送器的不同而不同。

经过0号规则集的地址必须解析到一个邮件发送器。因此,当某个地址匹配lhs时,rhs 将提供一个由邮件发送器、用户和主机组成的三元组。下面这行代码表示的是解析到某个邮件发送器的规则的语法:

Rlhs $#mailer $@host $:user some comment here...

上面的mailer是利用M命令定义的一个邮件发送器的名字,例如SMTP。host和user 通常是来自lhs的位置宏。

当sendmail在0号规则集中选择了一个邮件发送器后,它将通过1号规则集(通常是空的)来处理寄件人的地址,然后把它们发送到由这个邮件发送器中的S=标志所提供的规则集。

类似地,sendmail将把收件人的地址发送到2号规则集(通常也是空的)中进行处理,然后再把它们发送到邮件发送器的标志R=所提供的规则集。

最后,sendmail将在4号规则集中对所有地址进行后处理。4号规则集将把在3号规则集中插入的尖括号删除。

为什么不同的邮件发送器具有不同的S=和R=标志呢?考虑前面向zhang@somedomain.gov和posthost!zhao发送信件的例子。如果li@https://www.360docs.net/doc/f52011369.html,发送邮件,它必须针对每个收件人以不同的形式出现。对于zhang,它应该是一个域地址li@otherdomain.com;对于zhao,由于https://www.360docs.net/doc/f52011369.html,希望老式的UUCP地址(假设它具

有一个连向posthost的UUCP链接并且https://www.360docs.net/doc/f52011369.html,的UUCP主机名是posthost),因此返回地址应该是otherdomain!li。zhang的地址也必须为posthost的UUCP邮件发送器进行改写,并且zhang的副本必须包括他的邮件发送器可以处理的posthost的地址。

当sendmail把一个地址传递给某个规则集后,规则集中的每一个规则行将逐行地对它进行处理。如果某个规则行的lhs与地址相匹配,地址将被Ihs改写;如果它不匹配,sendmail 将继续到下一个规则,直到达到规则集的末尾为止。在规则集的最后,sendmail将把被改写的地址返回给调用规则集的规则集或是固有执行顺序的下一个规则集。

如果某个地址与lhs相匹配并且被rhs改写,这一规则将再次被调用——一个隐式循环。

如前面介绍,每一个改写规则都由R命令引人并且具有三个字段——左端(lhs或匹配端)、右端(rhs或改写端)以及可选的注释,各个字段之间必须由制表符隔开:

Rlhs rhs coment

sendmail将把地址和规则的lhs解析成标记,然后再逐个标记地把地址和lhs进行比较。宏$o包含sendmail用来把地址分隔成标记的字符,它通常具有如下的定义:#address delimiter characters

Do.:%@!^/[]

$o中的所有字符,既是标记分隔符,又是标记。sendmail获取像xie@rainbow.org 这样的地址,然后根据宏o中的字符把它分解成多个标记,就像下面这样:“xie”“@”“rainbow”“.”“org”

sendmail也把改写规则lhs分解为标记,从而使它们可以同输人的地址一个个地相比较,以确定是否匹配。例如,lhs $-@rainbow.org分解后的内容如下:

$-”“@”“rainbow”“.”“org”

其中“$-”是一个模式匹配操作符,类似于shell通配符,它用来匹配任何单一的标记符。现在可以把两组标记放在一起来揭示sendmail如何确定一个地址是否与规则的lhs相匹配。

“xie”“@”“rainbow”“.”“org”

“$”“@”“rainbow”“.”“org”

在此例中,由于来自地址的每个标记都匹配一个常量字符串(例如rainbow)或一个模式匹配操作符($-),因此地址和lhs相匹配并且sendmail将使用rhs来改写这一地址。接下来,考查一个改变$o值的效果。sendmail把地址xie@https://www.360docs.net/doc/f52011369.html,分解为五个标记;然而,如果@字符不在$o中,这一地址将完全不同地被分解为三个标记:“xie@rainbow”“.”“org”

由此看来,改变$o将对sendmail的地址解析产生极大的影响。因此除非用户对自己所做的事情非常有把握,否则应该保持它的原状。

·规则的左端(lhs)

lhs是sendmail用来与输入地址进行对比的模式,lhs既可以包含普通的文本,又可以包含任何模式匹配操作符。

lhs的模式匹配操作符主要包括:$-(匹配一个标记)、$+(匹配一个或多个标记)、$*(匹配零个或多个标记)、$@(匹配空的输入,用来调用错误邮件发送器)。

在lhs中,还可以利用下列宏和类的匹配操作符:$X(匹配宏X的值)、$=C(匹配类C中的任何一个词)、$~C(匹配不属于类C的任何一个标记)。

模式匹配操作符以及宏和类的匹配操作符是十分必要的,因为大多数规则必须匹配许多不同的输入地址。例如,某个规则可能需要匹配所有以https://www.360docs.net/doc/f52011369.html,结尾、以一个或多个其他任何内容开头的地址。

·规则的右端(rhs)

rhs是改写规则,其作用是通知sendmail如何来改写一个与lhs相匹配的地址。lhs可以包含文本、宏及对匹配内容在lhs中的位置把它匹配的内容赋值给一个数字宏$n。例如,假设地址zhang@hostl.https://www.360docs.net/doc/f52011369.html,被传递给下面的规则:

R $+@$+$:$1<@$ 2>foucus on domain

在此例中,由于zhang与$+(一个或多个任何内容的标记)相匹配,因此sendmail

将字符串zhang赋值给$l;地址中的@与lhs中的@相匹配,但常量字符串不被赋值给位置宏;字符串https://www.360docs.net/doc/f52011369.html,中的标记与第二个$十相匹配,因此它被赋值给了$2。这样被改写后的地址是$l<@$2>,也就是zhang<@hostl.https://www.360docs.net/doc/f52011369.html,>。

现在考查下面的这条规则:

R $* $:$1<@$j>add local domain

当在rhs改写一个地址后,sendmail将把改写过的地址再与当前规则的lhs相对比。在本例中,由于$*可以与0个或多个任何内容的标记相匹配,因此无论rhs如何改写地址,它将始终与$*相匹配,因此这一匹配规则将无限制地循环下去。为了避免sendmail在这条规则上进人死循环,引用了$:,它用来通知sendmail只对这一规则使用一次。

当希望一个规则集立即终止并把地址返回给调用这一规则集的规则集或sendmail固有

顺序中的下一个规则集时,可以在规则的rhs之前添加$@,它将使sendmail在rhs改写地址之后立即退出这一规则集。

一个规则集可以通过在rhs前面添加$>向另一个规则集传递地址,考查下面这一条规则:

R $* $:$>22 $1 call ruleset 22

rhs的$*匹配零个或多个标记,因此sendmail将不断地执行rhs,但由于在rhs前具有$:,所以这一规则只被使用一次。在这一规则中,$>22 $ 1 将以$1 为输入地址调用22号规则集。由于$1匹配的内容正是lhs中的内容,因此这一条规则只是把当前的输入地址原封不动地传递给22号规则集。22号规则集返回的任何内容都将传递给这一规则集中的下一条规则。

8.2.3 测试sendmail

在安装一个新的或经过修改的sendmail.cf之前,必须对它进行彻底的测试,因为即使是很小的、看起来不会造成危害的修改也可能会导致严重的后果。

测试的第一步是创建一些地址,这些地址应该是用户的站点需要用到的有效地址。例如,在没有UUCP连接Internet站点https://www.360docs.net/doc/f52011369.html,处,下面的地址有效。

zhang

zhang@https://www.360docs.net/doc/f52011369.html,

znang@https://www.360docs.net/doc/f52011369.html,

即使https://www.360docs.net/doc/f52011369.html,具有一个UUCP连接,也应该测试这些地址。其他一些需要考虑的地址包括各种别名(例如,Webmaster,include:列表,用来向文件邮寄的别名,用来向程序邮寄的别名)、非本地地址、源路由地址等等。

当创建好测试地址的列表后,可以使用-C和-bt选项来查看将要发生的情况。这些地址至少应该被传递3号规则集和0号规则集,从而确定它们是否能够被路由到正确的邮件发送器。完成这一任务的比较简单的方法是,创建一个包含被调用的规则集以及测试地址的文件,然后对它执行sendmail。例如,如果文件sdml.test包含下面的行:

3,0 zhang

3,0 zhang@https://www.360docs.net/doc/f52011369.html,

3,0 zhang@https://www.360docs.net/doc/f52011369.html,

那么,可以通过输入下面的命令来测试配置文件test.cf:

$sendmail-Ctest.cf-bt< sdml.test

rewrite:ruleset 3 input: zhang

rewrite: ruleset 3 retruns:zhang

[etc.]

还可以对一个或多个地址执行改写过程进行全面测试。例如,如果某个地址被解析到SMTP邮件发送器。并且这个邮件发送器指定R=21,那么可以通过使用3,2,21,4等来测试收件人地址的改写是否正确。

如果到目前为止sendmail.cf的工作正常,那么可以准备发送一些真正的信件。执行如下命令:

$sendmail-v-oQ/tmp-Ctest.cf recipient</dev/null

这里的一v选项使得sendmall以冗余方式显示信息,从而使用户可以看到所发生的事情。看到的内容或者像zhang…Sen这样的简单信息或者是一个完整的SMTP对话框。-oQ/tmp 用来通知sendmail使用/tmp作为它的队列目录。使用这一选项很必要。因为当利用-C选项运行时,sendmail将放弃它的超级用户权限,并且不能把队列文件写到正常的邮件队列目录中。由于这里使用了-C和-oQ选项,因此sendmail在信件中也将包含如下的警告标题,从而向收件人提醒一些伪造的邮件:

X-Authentieation-Warning:https://www.360docs.net/doc/f52011369.html,:Processed from queue/tmp

X-Authentication-Warning:https://www.360docs.net/doc/f52011369.html,:Processed by zhang with-C srvr.cf sendmail也将在信件中插入标题Apparemt;u-tp:zhang,这是因为虽然在命令上指定了收件人,但信件中却没有任何内容。在本例中,由于信件来自空文件/dev/null,因此没有可用的To:标题。如果以超级用户的身份执行测试任务,那么就可以不使用-oQ选项,sendmail便不会插人警告标题。通过创建像下面的文件并利用它作为输入来代替/dev/null,可以避免“Apparently-to:”标题的插入。

To:recipient

test

收件人是用户自己,以便检查邮件头的正确性。在一些特殊的情况下,返回地址行必须为SMTP包含一个FQDN。因此像From:zhang@somedomain这样的标题是不正确的,因为它不包含名字的域名部分,但像From:zhang@https://www.360docs.net/doc/f52011369.html,这样的标题是正确的。

3 sendmail的工作方式

sendmail应用广泛而且灵活,它有多种工作方式,能充当多种角色。sendmail可以作为邮件路由器、SMTP客户程序和SMTP服务程序。不过,它不执行最终的邮件投递。

sendmail的主要角色是充当一个邮件路由器。即通过它获取信件、检查收件人地址并确定发送信件的最好路径。sendmail是如何来执行这一任务呢?

sendmail可以确定它自己的一些信息,例如当前的时间和它运行所在的主机名,但它的大部分智能是由用户(“邮件管理员”)通过配置文件sendmail.cf的形式来提供的。这个配置文件确切地告诉sendmail如何来处理各类邮件,它非常灵活和强大,并且乍看起来似乎难于理解。

但是,正像上面介绍的那样,V8 sendmail具有一套模块化的配置文件构造块,大多数站点都能够利用这些模块轻易地构造出配置文件,并且还包括许多示例。

像前面提到的那样,sendmail可以作为一个MTA运行,因为它理解SMTP协议(V8 sendmail还理解ESMTP)。由于SMTP是一个面向连接的协议,因此客户程序和服务程序(也称为发送器和接收器)总是存在。SMTP客户程序可以向SMTP服务程序投递信件,SMTP 服务程序将不断地监听计算机的SMTP端口。sendmail可以是一个SMTP客户程序,也可以是一个SMTP服务程序。当sendmail被MUA运行时,它成为一个SMTP客户程序,并把客户端SMTP通知给SMTP服务程序(不必是另一个sendmail程序);当系统引导并且sendmail以守护进程模式启动时,它不停地运行,为新发来的邮件监听着SMTP端口,这时sendmail就是一个服务程序了。

sendmail所不做的一件事情是邮件的最终投递。sendmail把这一任务留给了其他程序。sendmail是一个大型的、复杂的、利用超级用户权限运行的程序,因此需要有一些方法来解决安全性的问题,有关安全性的问题在sendmail的过去已经发生过许多次。邮件投递的额外复杂性是sendmail有待解决的最后一个问题。

4 配置Elm和Pine

配置好sendmall邮件系统后,就可以发送和接受邮件了。但是仅仅能够收发邮件还不够,还需要显示邮件、管理邮箱的程序,因此还必须配置MUA程序。在Linux/UNIX中有很

多这样的MUA程序,其中影响最大、应用最广的是Elm和Pine。在Linux的各个版本都包含了这两个邮件程序。下面介绍如何对它们进行正确的配置。

4.1 配置Elm

Elm代表Electronic Mail,它的功能非常强大并且提供很好的帮助系统。在多数情况下,只要sendmail邮件系统能够正常运行,就可以运行Elm程序。

Elm的配置文件是/usr/lib/elm/elm,对于一般用户来说,仅需修改此文件中与机器名和域名有关的选项。代码清单8.l给出的elm.rc文件经过了删节,仅保留了一般用户要作修改的部分。

代码清单8.1 elm.rc配置文件

#Local hostname

hostname=mymailer

#Domain name_

hostdomain=.sw.edu.cn

#Fully qualitifed domain name

hostfullname=https://www.360docs.net/doc/f52011369.html,

从上面的例子可以看出,配置语句的格式是:“变量=值”,看起来比较直观。值得注意的是,城名前面必须加上一个圆点,否则会导致机器名出错。

缺省情况下,Elm程序使用ASCⅡ字符集,当它遇到不能识别的字符时,就调用系统进程metamail来显示代码。当进程metamail运行时,将减慢邮件程序Elm的运行速度。为了使Elm程序可以处理Linux系统使用的标准字符集,要在文件/usr/lib/elm/elm.rc 中加人下面的语句:displaycharset=iso-8859-l

另外,因为Elm程序不能正确处理ISO-8859-l字符集中的有些特殊字符,所以要在文件elm.rc中加入下面两行:

charset=iso-8859-l

textencoding=8bit

缺省情况下,系统将一个字节中最后一位去掉以产生7位的字符。第二行命令把系统设置成可以处理8位字符。

Elm程序的配置信息被保存在文件/usr/lib/elm/elm.rc中和用户主目录的.elm/elm.rc 文件中。这两个文件是Elm程序运行时自动产生的,用户不必直接去编辑这两个文件。

8.4.2 配置Pine

Pine也是一个常用的邮件程序。和Elm一样,Pine程序也通过一个配置文件来控制邮件程序的访问和操作。Pine程序的配置可以引用系统变量的值,也可以由用户定义。

Pine程序可以通过修改文件.pinerc来配置。这个配置文件比较庞大。但一般用户仅需关心该文件的三部分:(l)系统名和用户标志的配置;(2)邮箱的配置;(3)Pine程序属性的配置。

下面的代码清单8.2节选了配置文件关于系统名和用户标志的配置部分。其中设置为空的项表示使用系统的缺省值。如果需要用户定制,可以在等号右边填写。配置的第一项是personal-name=

一般用登录名(账号名)即可,当然也可以填写其他名字。其他配置如smtp-server、nntp -server、user-domain、inbox-path都可以用系统缺省值。在配置之前,认真地阅读开头的注释部分是很有必要的。

代码清单8.2 .pinerc中系统名和用户标志的配置部分

#Updated by Pine(tm) 4.10,copyright 1989-1999 University of Washington.

#Pine configuration file-custornize as needed.

#This file sets the configuration iptions used by Pine and PC-Pine.If you

#are using Pine on a Unix systern,there may be a systern-wide configuration

#file whick sets the defaults for these variables.There are comments in

#this file to explain each variable, but if you have questions about

#specific settings see the section on configuration options in the Pine

#notes.On Unix,run pine-conf to see how system defaults have been set.

#For variables that accept multiple values,list elements are separated

#by commas. A line beginning with a space or tab is considered to be a

#continuation of the previous line. For a variable to be unset its value

#must be blank. To set a variable to the empty string its value should

#be””.You can override systern defaults by setting a variable to the

#empty string. Switch variables are set to either "yes" or "no",and

#default to "no".

#Lines beginning with "#"are comments,and ignored by Pine.

#配置用户名,一般可以用户登录名(即用户账号)。

personal-name=your_login_name

#设置用户的域名.

user-domain=

sendmail邮件服务器详细配置讲解

sendmail邮件服务器详细配置讲解 Sendmail服务软件包: sendmail-8.13.8-2.el5.i386.rpm//sendmail服务的主程序包 sendmail-cf-8.13.8-2.el5.i386.rpm //sendmail宏文件包 sendmail-devel-8.13.8-2.el5.i386.rpm //sendmail服务器开发工具软件包 sendmail-doc-8.13.8-2.el5.i386.rpm //sendmail服务器的说明文档 m4-1.4.5-3.el5.1.i386.rpm //宏处理过虑软件包 dovecot-1.0-1.2.rc15.el5.i386.rpm //接收邮件软件包,安装时需要注意安装顺序 Sendmail相关配置文档: /etc/mail/sendmail.cf //sendmail核心配置文件。 /etc/mail/sendmail.mc //模板文件,定义了操作系统类型、文件位置、请求特征及邮件发 送工具、用户列表等信息,通过编辑此文件后再使用m4工具将 结果导入sendmail.cf完成配置sendmail核心配置文件,降低配置 复杂度。 /etc/mail/local-host-name //本地主机名和域名的列表,决定收到的邮件是本地邮件,还是远 程邮件,然后决定是本地投送还是转发 /etc/mail/access //完成中继转发功能,即加入允许访问的域名 /etc/mail access.db //是通过access文件生成的数据库 /etc/aliases.db //用来定义邮箱别名,位于/etc/mail/aliases.db virtusertable.db//用来设置虚拟账户,位于/etc/mail/virtusertable.db /etc/mail/sendmail.cw //当一个主机有多个域名时,在此加入这些域名/var/spool/mqueue //邮件队列临时存放的目录 /var/mail //存放所有收到的邮件 /var/log/maillog //日志文件 搭建Sendmail服务器流程: (*)配置好DNS下的邮件交换器记录*邮件交换器记录必需要添加,不然不能发送邮件(1)配置sendmail.mc文件 (2)使用m4工具将sendmail.mc文件导入sendmail.cf文件 (3)配置local-host-names文件 (4)建立用户帐号 (5)重新启动服务使配置生效

Sendmail邮件服务器搭建与配置笔记

Sendmail邮件服务器搭建与配置笔记 2010-10-25 15:31:25 标签:DNS sendmail relay BIND450 原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处、作者信息和本声明。否则将追究法律责任。https://www.360docs.net/doc/f52011369.html,/391263/410414 本笔记仅用于局域网内两台sendmail实验,以方便日后实验的拓展。关于sendmail网上的例子很多,腌还是按自己的步骤进行吧!一步一步。。。。 目的:熟悉sendmail的配置方法、以及在sendmail出现故障时排错方法。 要求:熟悉BIND(DNS)的配置方法 要点:熟悉sendmail的朋友可以闪了,两台机器之间发邮件。 1、能够相互解析 2、如果是利用客户端向另外一个邮件域发邮件,需要开启客户端所登录的服务器上的RELAY功能。 知识点回顾: =================================== 这个兄弟把MUA、MDA、MTA讲的很好。转了转了! https://www.360docs.net/doc/f52011369.html,/xiamenyu/blog/item/3e1db3d15b37903d9a50277d.html MUA:邮件用户代理;指的就是如Foxmail,outlook,等邮件客户端程序。 MDA(Mail Delivery Agent):“邮件投递代理”主要的功能就是将MTA接收的信件依照信件的流向(送到哪里)将该信件放置到本机账户下的邮件文件中(收件箱),或者再经由MTA将信件送到下个MTA。如果信件的流向是到本机,这个邮件代理的功能就不只是将由MTA传来的邮件放置到每个用户的收件箱,它还可以具有邮件过滤(filtering)与其

在LINUX中部署sendmail 服务器(邮件服务器)

在LINUX中部署sendmail 服务器(邮件服务器) 出处 https://www.360docs.net/doc/f52011369.html,/375221/92487 一. 邮件服务器,的一些基本常识。 1. POP 协议端口号为:110 用于接收邮件。 2. SMTP 协议端口号为:25 用于发送邮件。 3. 邮件传输的过程有两种情况。 1)一种是,邮件发送与接收者在同一域内。 2)一种是,邮件发送与接收者在不同域内,此时必须通过DNS服务器来转换。 二. 配置前的工作如下: 1. 确认服务是否安装。 rpm -qa sendmail 2. 调整状态。 1)自动启动:

2)手动调整: 3. 更改hosts文件。 /etc/hosts 格式:主机IP地址主机的DNS名主机的NETBIOS名

service network restart 4. 具体配置如下: 1)cd /etc/mail vi sendmail.cf (主配置文件) 2)cd /etc/mail vi local-host-names (指定主机名)

3)cd /etc/mail vi access (定义中继) makemap hash access.db

service dovecot restart 5)最后重启SENDMAIL服务。 service sendmail restart 6)DNS的配置。 在域的正向区域文件中加入MX记录。

service named restart 5. 测试: 在服务器上创建两个用户SSS和CCC用来做测试。 确保服务器与客户机能正常能信。 服务器IP: 192.168.0.7 客户机IP: 192.168.0.101

sun solaris下配置通过sendmail 发送alert

sun solaris下配置通过sendmail 发送alert 就是这么简单! The steps below are relevant to Sun SOLARIS Servers running Solaris 2.6 or 2.8, consult your System Administration manual for details on how to perform this for other hardware vendors / operating systems. 1. If the sendmail daemon is currently running on your system, terminate it with the following command: /etc/init.d/sendmail stop 2. Copy /etc/mail/main.cf to /etc/mail/sendmail.cf 3. Edit /etc/hosts and place an entry here for the SMTP gateway machine, e.g: 1.2.3.4 mailhost 4. To test connectivity to the SMTP machine called mailhost, enter the following command: telnet mailhost 25

This will initiate a telnet session with the mailhost machine on port 25, which is the port that the SMTP daemon listens for incoming messages. 5. Edit the /etc/mail/sendmail.cf file and edit the following entries: Change Dmsmartuucp to Dmether This changes the mailer program for remote mail delivery from uucp to the smtp mailer. Change DR ddn-gateway to DR mailhost Change CR ddn-gateway to CR mailhost This changes the behavior of the sendmail daemon to route all remote mail generated from this server to be directed at the SMTP host you defined in /etc/hosts 6. Save the sendmail.cf configuration file 7. Start the sendmail daemon by issuing the following command: /etc/init.d/sendmail start 8. Run $POM_TOP/bin/MasterScript.sh stop 9. Add /usr/lib to the PATH in the .profile file and activate it 10. Run $POM_TOP/bin/MasterScript.sh start apps/apps Test sendmail -------------

sendmail配置文档

配置文档 小组人员(彭勃,陈晓西,刘艳玲,杨蓓蕾) 安装sendmail的rpm包 2:装好后进去安装的目录:cd /etc/mail 3: 设置SMTP的用户认证 邮件服务器提供发送邮件的功能是很正常的,但是如果为所有人都能够无条件地发送(投递)邮件是很危险的,非常容易造成大量垃圾邮件产生。因此在sendmail 服务器中需要设置发送邮件的用户认证,当用户使用MUA软件通过SMTP向邮件服务器发送邮件时,邮件服务器会要求用户提供用户账号和口令进行身份认证,只有通过身份认证的用户才能通过邮件服务器向外部发送邮件。RHEL5系统中提供的sendmail服务器提供了SMTP的用户认证功能,但是默认的设置没有启用此功能,因此需要在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 修改为: 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 特别注意:以上两行去掉了前面的注释串dnl后,前面一定不能留有空格,否则在启动sendmail服务时会出错! 在sendmail服务器中,使用了sasl的第二版sasl2作为SMTP的认证方式,在/usr/lib/sasl2/Sendmail.conf配置文件中设置了使用saslauthd服务程序提供用户认证服务,因此当sendmail服务器使用SMTP认证功能时,需要确保saslauthd服务程序正确运行: #cat /usr/lib/sasl2/Sendmail.conf pwcheck_method:saslauthd #chkconfig --level 35 saslauthd on

senmail原理介绍及其配置

一、原理介绍 二、安装sendmail #rpm –qa|grep sendmail #mount /mnt/cdrom #cd /mnt/cdrom/RedHat/RPMS #rpm –ivh sendmail-8.12.8-4.i386.rpm (服务器) #rpm –ivh sendmail-cf-8.12.8-4.i386.rpm 与SENDMAIL相关的文件与程序 #rpm –ivh sendmail-doc-8.12.8-4.i386.rpm 文档 三、启动sendmail #vi /etc/mail/sendmail.cf Daemonportoptions=port=smtp,addr=127.0.0. 1,name=MTA(修改) #service sendmail start #service sendmail restart #pstree |grep sendmai #检查 |-2*[sendmail] 表示已经启动

四、安装和启动IMAP #rpm –qa|grep imap #mount /mnt/cdrom #cd /mnt/cdrom/RedHat/RPMS #rpm –ivh imap-2001a-18.i386.rpm 启动imap #vi /etc/xinetd.d/ipop3 修改文件 把disable=yes改成disable=no #vi /etc/xinetd.d/imap 修改文件 把disable=yes改成disable=no 把disable=yes改成disable=no #service xinetd restart 五、配置DNS的MX记录 https://www.360docs.net/doc/f52011369.html,. IN MX 5 https://www.360docs.net/doc/f52011369.html,. https://www.360docs.net/doc/f52011369.html,. IN MX 6 https://www.360docs.net/doc/f52011369.html,. 六、修改默认的sendmail配置 #vi /etc/mail/local-host-names 添加举例:https://www.360docs.net/doc/f52011369.html, https://www.360docs.net/doc/f52011369.html, 保存重启服务 #service sendmail restart

RedHat6.2服务器配置方案大全(六):Sendmail

RedHat6.2服务器配置方案大全(六):Sendmail 第六章Sendmail 6.1 简介 邮件服务是用户所需要的最重要的网络服务。Web的通信量很大,但邮件主要用于个人之间的通信,而人-人的通信是商务的基础。没有邮件服务的网络是不完整的网络。换句话说,如果不能给用户提供完整的TCP/IP下的邮件支持,这样的网络操作系统也不值得信赖。 配置sendmail是一件大而复杂的工作,但也不完全都是这样,与其他一些网络服务器系统只安装SMTP服务器软件的情况相比,Linux已经配置好了多数的设置。在多数系统下,缺省配置都能良好的运行。我将在本章中给出一些配置的建议,主要的一些配置参数建议大家不要随意更改。 6.2 所需系统资源 6.2.1 配置文件: 文件来源 /etc/sendmail.cf sendmail-8.9.3-20.i386.rpm /etc/sendmail.cw sendmail-8.9.3-20.i386.rpm 6.2.2 相关工具: 文件来源 /etc/rc.d/init.d/sendmail sendmail-8.9.3-20.i386.rpm 6.3 配置方案 1./etc/sendmail.cf sendmail的主配置文件 作用: 控制sendmail运行时的配置。完整的sendmail配置应该包括7部分: Local Info(本地信息):这部分定义了本地主机的信息 Options(选项):用来设置定义sendmail环境的选项。 Message Precedence(消息的优先级):sendmail消息的优先级 Trusted Users(信任用户):定义发送邮件时允许改变发送地址的用户

linux sendmail配置

linux 邮件服务器(sendmail) 1.简介 sm tp sm tp pop3 2.分类 <1>sendmail <2>q mail <3>webmail 3.使用的协议 sm tp:(simple message transport protocol)简单消息传输协议 pop3:(post office protocol3)邮局协议3 4.术语 MTA: Mail Transport Agent 邮件传输代理,即指邮件服务器;MUA: Mail User Agent 邮件用户代理,如: outlook,foxmail等; 5.sendmail的服务器包 sendmail-8.13.8-2.el5.i386.rpm sendmail-devel-8.13.8-2.el5.i386.rpm sendmail-cf-8.13.8-2.el5.i386.rpm sendmail-doc-8.13.8-2.el5.i386.rpm #rpm –q sendmail //安装sendmail的软件包 #rpm -ivh sendm ail-devel #rpm –ivh sendmail-cf

#rpm –ivh doc 6.配置邮件服务器 <1>//修改sendmail的配置文件 #cd /etc/m ail //用m4命令编译生成sendmail.cf文件 #m4 sendmail.m c>sendmail.cf 备注:假如以上命令无效,请安装包: m4-1.4.5-3.el5.i386.rpm //修改主配置文件 #vi /etc/m ail/sendmail.c f //修改第265行,打开全网段邮件收发功能,将127.0.0.1改为0.0.0.0,如: //修改本地主机名 #vi /etc/m ail/local-host-nam es 添加 https://www.360docs.net/doc/f52011369.html, https://www.360docs.net/doc/f52011369.html, //加入允许本网段中继转发邮件功能 #vi /etc/m ail/access 添加 Connect:192.168.1 RELAY

AIX系统sendmail配置

sendmail通过 SMTP 服务器发 Internet 邮件的相关配置 AIX 的 mail 系统中最重要的三个组成部分是用户接口(the user interface)、消息路由程序(the message routing program)和消息投递程序(the message delivery program)或 mailer。AIX 系统中的 mail 程序就是所谓的用户接口(the user interface),它对应上文提到的邮件用户代理 MUA;sendmail 程序就是所谓的消息路由程序(the message routing program),它对应前面所说的邮件传输代理 MTA。在传递邮件的时后,如有必要,sendmail 命令将与远程系统建立 TCP/IP 连接 , 然后使用 SMTP 传递邮件到远程系统。AIX 邮件系统的工作原理和配置,和 Linux 基本都相同,特殊的地方有以下几点Sendmail服务状态查看 lssrc -s sendmail Sendmail服务启动 startsrc -s sendmail Sendmail服务停止 stopsrc -s sendmail Sendmail服务重启 refresh -s sendmail Sendmail 的配置文件是 /etc/mail/sendmail.cf 要想在 Sendmail 配置文件中添加邮件中继服务器(智能主机),应该编辑 /etc/mail/sendmail.cf 文件,修改 DS 行并刷新守护进程: # vi /etc/mail/sendmail.cf DS[SMTP 的主机 IP] # refresh -s sendmail

linux下sendmail的安装与配置

1.要求利用Linux系统下的Mail服务,能够收发邮件; 2.突出邮件服务器的特点,能够用OutLook收发邮件; 一.配置DNS 1. 使用vi /etc/named.conf打开DNS主配文件,然后找到最后一行,并在最后一行上面添加下列内容: zone "https://www.360docs.net/doc/f52011369.html," IN { type master; file "https://www.360docs.net/doc/f52011369.html,.zheng"; allow-update { none; }; }; zone "1.254.10.in-addr.arpa" IN {

type master; file "10.254.1.fan"; allow-update { none; }; }; 2. 迚入/var/named目录,将该目录下的localhost.zone和named.local 分别拷贝为https://www.360docs.net/doc/f52011369.html,.zheng和10.254.1.fan,如下: [root@localhost root]# cd /var/named/ [root@localhost named]# ls localhost.zone named.ca named.local [root@localhost named]# cp localhost.zone https://www.360docs.net/doc/f52011369.html,.zheng

[root@localhost named]# cp named.local 10.254.1.fan [root@localhost named]# ls 10.254.1.fan localhost.zone named.ca named.local https://www.360docs.net/doc/f52011369.html,.zheng 然后编辑https://www.360docs.net/doc/f52011369.html,.zheng和10.254.1.fan两个文件,将这两个文件分别改为如下内容: 两文件中https://www.360docs.net/doc/f52011369.html,后面的点(.)不可少 [root@localhost named]# vi https://www.360docs.net/doc/f52011369.html,.zheng $TTL 86400 @ 1D IN SOA https://www.360docs.net/doc/f52011369.html,. https://www.360docs.net/doc/f52011369.html,. ( 42 ; serial (d. adams)

linux sendmail服务

rhel-5.1-server安装sendmail笔记 (write by 薛伟民)—QQ:9547143 一、sendmail介绍 1.检查已安装的sendmail包 #rpm –ql |grep sendmail 2.配置文件路径 #cd /etc/mail/目录下 有二个文件,sendmail.cf sendmail.mc 3.修改配置文件 #vi /etc/mail/senmail.mc 4.查找127,修改Addr 5.产生配置文件,并且必须安装一个包,否则M4会出错 6.修改主机的名字 #vi /etc/sysconfig/network hostname名字为https://www.360docs.net/doc/f52011369.html, 其中sm1为主机名,https://www.360docs.net/doc/f52011369.html,为域

同时注意/etc/hosts文件,应为: 192.168.0.8 https://www.360docs.net/doc/f52011369.html, (对应https://www.360docs.net/doc/f52011369.html,) 重启系统 7.测试: #sendmail -d0 8.启用110,143端口来收取邮件,所以必须启动服务dovecot 或者使用如下也可以,功能同dovecot 9.测试收发邮件 #telnet https://www.360docs.net/doc/f52011369.html, 25 二、实现邮件的群发 1.修改/etc/aliases文件 2.重新读取aliases文件 #newaliases 3.测试 #mail -s stu49 stu49@https://www.360docs.net/doc/f52011369.html, 三、实现域与域之间的互发 1.修改/sendmail.mc

修改完毕以后重新M4一下 2.启动saslauthd服务 该服务主要用于用户间的认证 3.建立本机DNS域名解析 4.修改/etc/resolv.conf Nameserver 192.168.0.8 (本机ip) 5.测试本机DNS解析 这是在其它的机器上测的,所以ip为192.168.0.94 本机上应为192.168.0.8 6.实现双域间的转发

Sendmail邮件服务器搭建

Sendmail邮件服务器搭建 安装并配置sendmail服务器 使用rpm命令确认sendmail软件包差不多安装 使用rpm命令安装sendmail-cf和sendmail-doc软件包,具体见下图 在文件“/etc/mail/sendmail.mc”中配置服务的网络接口和SMTP认证设置 使用vi编辑器打开后,使用在末行模式里快速定位到需要修改的地点打开后模式的地址是127.0.0.1 修改后的地址为0.0.0.0,如下图 设置SMTP的用户认证,具体见下图 使用m4命令生成“/etc/mail/sendmail.cf“配置文件,见下图 使用vi编辑器修改/etc/mail/access文件,添加能进行邮件中继转发的网段,提升邮件服务器的安全性 使用makemap 命令生成新的数据库文件,具体见下图 修改/etc/aliases文件,在里面能够添加不名,实现邮件的群发功能

使用newaliases命令重新生成aliases.db文件 确认“/usr/lib/sasl2/Senmail.conf”配置文件的内容和saslauthd服务程序差不多启动 使用sendmail脚本启动sendmail服务器程序 安装并配置dovecot服务器 使用RHEL4系统中的应用程序治理工具安装dovecot服务器软件包在”/etc/dovecot.conf”文件中设置dovecot服务器提供POP3服务 使用dovecot脚本启动dovecot服务程序 通过netstat命令查看dovecot服务程序监听的服务端口 域名和用户账号设置 在邮件服务器主机中为用户yueyang和changsha建立系统账号,指定用户主名目,指定shell程序为/sbin/nologin,使邮件账号不能登录linux系统,具体见下图

IBM - AIX上的Sendmail邮件服务器的配置及常见问题

AIX 上的Sendmail 邮件服务器的配置及常见问题 文档信息 产品类别: 软件类型 未分类 参考号: 48256E0B004356F1 IBM 组: China Support Center 修改日期: 2004-07-27 评价此页面帮助我们改善此页面。您的回应将用于完善我们的 文档内容。如果技术援助 在您所在的国家或地区提供,请通过正常的支持渠 道进行提交,因为我们无 法通过此站点进行回应。

FEATURE(mailertable)dnl FEATURE(virtusertable)dnl FEATURE(domaintable)dnl FEATURE(allmasquerade)dnl FEATURE(promiscuous_relay)dnl FEATURE(accept_unresolvable_domains)dnl FEATURE(accept_unqualified_senders)dnl DOMAIN(generic)dnl MAILER(local)dnl MAILER(smtp)dnl MAILER(uucp) 编辑修改后如下: #more mysendmail.mc -------------------------------------------- divert(0)dnl OSTYPE(aix433)dnl FEATURE(allmasquerade)dnl DOMAIN(generic)dnl MAILER(local)dnl MAILER(smtp)dnl MAILER(uucp) -------------------------------------------- 注意:在mysendmail.mc中,注释是不起作用的,所以不需要的feature 一定要删除,否则在生成sendmail配置文件时会出错。 下面我们要创建sendmail.cf # cd /usr/samples/tcpip/sendmail/cf # m4 ../m4/cf.m4 mysendmail.mc > mysendmail.cf # mv mysendmail.cf /etc/sendmail.cf C、当用mail -v发送邮件时,发现要过很长时间才能发出才回到提示符,该如何处理? # mail -v ql Subject: test Just a test . Cc: WARNING: The local host name (r6f50) does not have a domain; fix $j in config fi le ql... Connecting to local... ql... Sent 这个问题的产生是由于我们在sendmail.cf中并未指定域名,那么sendmail宏在处理$j时不知怎么办,那么会延长daemon的处理时间。解决办法 是使用空域名。 # vi /etc/hosts ipaddress hostname hostname. 主要是在原来的记录上加hostname和一个点”.”然后存盘退出 # mail -v ql Subject: test Just a test . Cc: ql... Connecting to local... ql... Sent

sendmail详解 全过程

sendmail是最重要的邮件传输代理程序。理解电子邮件的工作模式是非常重要的。一般情况下,我们把电子邮件程序分解成用户代理,传输代理和投递代理。用户代理用来接受用户的指令,将用户的信件传送至信件传输代理,如:outlook express、foxmail等。而投递代理则从信件传输代理取得信件传送至最终用户的邮箱,如:procmail。 当用户试图发送一封电子邮件的时候,他并不能直接将信件发送到对方的机器上,用户代理必须试图去寻找一个信件传输代理,把邮件提交给它。信件传输代理得到了邮件后,首先将它保存在自身的缓冲队列中,然后,根据邮件的目标地址,信件传输代理程序将找到应该对这个目标地址负责的邮件传输代理服务器,并且通过网络将邮件传送给它。对方的服务器接收到邮件之后,将其缓冲存储在本地,直到电子邮件的接收者察看自己的电子信箱。 显然,邮件传输是从服务器到服务器的,而且每个用户必须拥有服务器上存储信息的空间(称为信箱)才能接受邮件(发送邮件不受这个限制)。可以看到,一个邮件传输代理的主要工作是监视用户代理的请求,根据电子邮件的目标地址找出对应的邮件服务器,将信件在服务器之间传输并且将接收到的邮件缓冲或者提交给最终投递程序。有许多的程序可以作为信件传输代理,但是sendmail是其中最重要的一个,事实证明它可以支持数千甚至更多的用户,而且占用的系统资源相当少。不过,sendmail的配置十分复杂,因此,也有人使用另外的一些工具,如qmail、postfix等等。 下面就如何在Linux下利用Sendmail架设Mail服务器作介绍: 一.安装Sendmail。 完全安装Red Hat Linux 9.0时,Sendmail就会自动内置,版本号为8.12.8-4。如果你不确定Linux是否已经安装有sendmail,可以输入以下命令查看: [root@ahpeng root] rpm –qa grep sendmail 如果确定没有安装,请在图形界面下依次选择单击“主菜单-系统设置-添加删除应用程序”,然后在打开的“软件包管理”窗口里选中“邮件服务器”选项,点“更新”后按照提示安装即可。 另一种办法是:直接插入Linux第1张安装光盘,选择/RedHat/RPMS目录下的 sendmail-8.12.8-4.i386.rpm安装包,之后运行[root@ahpeng RPMS] # rpm -ivh sendmail-8.12.8-4.i386.rpm即可开始安装,再用此方法在第3张安装光盘的同目录下依次安装sendmail-cf.8.12.8-4.i386.rpm、sendmail-doc. 8.12.8-4.i386.rpm。 二.启动Sendmail服务系统。 建议使用带参数的Sendmail命令控制邮件服务器的运行:[root@ahpeng root]# sendmail -bd –q12h,后跟的参数解释如下: -b:设定Sendmail服务运行于后台。 -d:指定Sendmail以Daemon(守护进程)方式运行。 -q:设定当Sendmail无法成功发送邮件时,就将邮件保存在队列里,并指定保存时间。上面的12h表示保留12小时。 此外,要检测Sendmail服务器是否正常运行,可以使用命令行:[root@ahpeng root] # /etc/rc.d/init.d/sendmail status。 三.配置Sendmail。 sendmail.cf的配置语法比较难懂,一般资料上都是采用m4宏处理程序来生成所需的

虚拟机LINUX下mail配置

Sendmail服务的安装: rpm –qa | grep sendmail 查找所需软件包(sendmail-8….以及sendmail-cf-8…以及m4-1.4.5..以及dovecot-1.0…) rpm –q sendmail 检验是否安装了sendmail服务 rpm –ivh sendmail-8.13…….安装sendmail软件包 Sendmail服务器的配置流程: 配置sendmail.mc文件 使用m4工具将sendmail.mc文件导入sendmail.cf文件 配置local-host-names文件 建立用户 重新启动服务,使配置生效 案例流程: vi /etc/mail/sendmail.mc 编辑mc文件 ###################################################### 此文件中只需更改第116行: 原文:DAEMON_OPTION(‘PORT=smtp,Addr=127.0.0.1,Name=MTA’)dnl 改为:DAEMON_OPTION(‘PORT=smtp,Addr=0.0.0.0,Name=MTA’)dnl ############################################################### 将.mc文件导入.cf文件: (先安装m4:rpm –qa m4 然后rpm –ivh 进行安装) m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf ################################################################ 配置local-host-names文件:(此步非必备步骤,新人可掠过) vi /etc/mail/local-host-names 编辑文件 ############################################################################## (这个文件是设置邮件服务器的别名的只需把自定义的主机别名加进来,如无必须可以不添加,见下例:例如别名为https://www.360docs.net/doc/f52011369.html,) https://www.360docs.net/doc/f52011369.html, ############################################################################## Sendmail的启动:service sendmail start Sendmail服务配置的重新加载service sendmail reload ****************************************************************************** POP和IMAP的安装: rpm -qa|grep dovecot 查询软件包 rpm –ivh dovecot 安装软件包 service dovecot start 启动服务 netstat –an|grep 110 测试pop3端口是否开启 netstat –an|grep 143 测试imap端口是否开启 ******************************************************************************* 建立用户: useradd aa 用户aa passwd aa 修改用户aa密码 (如上所示在另建一个账户用来进行收发邮件测试) *******************************************************************************

linux邮件服务器配置+outlook邮件客户端实验

步骤一 配置虚拟机linux的IP地址为192.168.3.28,并配置主域名DNS为192.168.3.28 步骤二 配置DNS域名服务,邮件服务器的域名为https://www.360docs.net/doc/f52011369.html,,IP为192.168.3.28,并启动named服务 步骤三 打开虚拟机,点击“系统”——“管理”——“用户和群主”,添加两个用户,分别为user1

和user2,如下图所示: 步骤四 点击“计算机”——“文件系统”——“etc”文件夹——“mail”文件夹——“access”文件,在末尾添加“Connect:192.168.3.28 RELAY”——修改成如下所示:

步骤五 点击“计算机”——“文件系统”——“etc”文件夹——“mail”文件夹——“local-host-names”文件,在末尾添加“https://www.360docs.net/doc/f52011369.html,”,修改成如下所示: 步骤六 点击“计算机”——“文件系统”——“etc”文件夹——“mail”文件夹——“sendmail.cf”文件,找到256行中的“DaemonPortOptions=Port=smtp,Addr=127.0.0.1, Name=MTA”,把地址“127.0.0.1”修改成“192.168.3.28”,如下图所示,点击保存。 步骤七 点击“计算机”——“文件系统”——“etc”文件夹——“dovecot.conf”文件,找到16行的“#protocols = imap imaps pop3 pop3s”,把前面的“#”去掉,点击“保存”

打开终端,输入如下命令 步骤九 点击“系统”——“管理”——“服务器设置”——“Services”,启动“dovecot”服务和 “sendmail”服务;

linux系统SendMail详细配置

1、安装相关服务 DNS Mailserver(sendmail、imap) 2、启动相关服务 Service named restart Service sendmail restart Service xinetd restart Chkconfig ipop3 on 3、配置DNS,添加MX纪录 配置DNS略 正/反向区间文件添加MX纪录 IN MX 10(优先级) https://www.360docs.net/doc/f52011369.html, Mail IN A 192.168.1.100 4、主配置文件 /etc/mail/sendmail.cf 搜索/smtp Port=smtp,Addr=192.168.1.100 5、接受域配置文件 Vi /etc/mail/local-host-names 添加 https://www.360docs.net/doc/f52011369.html, 192.168.1.100 6、中继转发配置文件 /etc/mail/access.db(不可访问) Vi /etc/mail/access 添加 https://www.360docs.net/doc/f52011369.html, 192.168.1 退出 Makemap hash access.db < access 6、添加用户 Useradd user01 Passwd user01 Useradd user02 Passwd user02 7、重启服务 Service sendmail restart

Service xinetd restart 补:邮件用户别名,邮件域别名 A)用户别名 1、Vi /etc/aliases 别名用户名 A01 user01 A02 user02 退出 2、Newaliases B)邮件域别名 1、配置相关DNS略 2、添加域别名 Vi /etc/mail/sendmail.cw https://www.360docs.net/doc/f52011369.html, https://www.360docs.net/doc/f52011369.html, 退出 3、接受域配置文件 Vi /etc/mail/local-host-names https://www.360docs.net/doc/f52011369.html, https://www.360docs.net/doc/f52011369.html, 192.168.1.100 4、重启服务 Service named restart Service sendmail restart Service xinetd restart 补:启用smtp认证 1、安装相关模块 Rpm –qa | grep sasl Linux盘中:RedHat—〉RPMS—>sasl* 2、修改/etc/mail/sendmail.mc(sendmail.cf的源代码) Vi /etc/mail/sendmail.mc 查询:43 TRUST_AUTH* :44 :85 DAEMON_OPTION* :92 DAEMON* 注:去掉dnl(注释) 3、生成sendmail.cf

linux sendmail配置详解

sendmail MUA (mail user agent 邮件用户代理),用于用户端发送邮件或者阅读邮件 linux有mutt这个工具 MTA (mail tranfer agent 邮件传输代理),相当于一个邮局,server端的软件,主要的功能有,接收MUA发来的邮件和把邮件发送给下一个MTA,可以说是一个邮件路由(mail router),server端的软件就属于MTA,现在开源的有sendmail,postfix,qmail等 MDA (mail devilery agent 邮件投递代理),主要是将MTA所接受的邮件,依照邮件的目的地将此邮件放到本机账号下或者是给下一个MTA,一般就是指mail 这样的命令 邮件的协议: 发信: SMTP (simple mail tranfer protocol 简单邮件传输协议)端口号TCP的25端口,在发信时,MUA会主动连接MTA的port 25,然后经由SMTP协议发送出去,SMTP分为接受SMTP和发送SMTP,它不管两端主机的配置或者系统等,只要两边SMTP协议OK就可以发送邮件 收信: POP (post office protocol 邮局协议),来连接到MTA,以读取或者下载邮件,现在常用的版本是POP3,端口为110 IMAP (internet message access protocol 网络报文件协议),能在下载邮件前先下载邮件头信息,以可以让用户选择性下载端口 143 软件包 yum install sendmail* yum install dovecot sendmail.i386 --邮件服务器端 MTA sendmail-cf.i386 --配置文件包 sendmail-devel.i386 --开发包 sendmail-doc.i386 --文档包 dovecot.i386 --(鸽舍),pop邮件服务端 MDA m4.i386 --处理配置文件的包 端口: smtp (25) pop3 (110) imap (143) 协议: TCP 服务启动脚本:

相关主题
相关文档
最新文档