分类: LINUX
2009-06-22 22:50:54
在一个运行了Sendmail的系统上,你可以自动的把你的邮件转寄给另一个e-mail地址。如果你需要把你的邮件转到另一个账号、使用一个不经常使用的账号、或者希望把你的所有消息在两个不同收件箱中保留备份的话,这是很有用的。
如果Sendmail收到一个本地用户的消息,它首先检查home目录,看是否有一个叫做.forward的文件存在。如果存在,这条消息就根据.forward里制定的规则被转发。否则,消息就被传送到用户的本地收件箱。
文件.forward的名字需要引起一定的注意。以一个点开头的的文件名在Linux里被处理为隐藏文件。在你察看一个目录的文件列表时,该目录中的隐藏文件一般是不被显示的。要想看到这些文件,你必须使用带有-a选项的ls命令。例如,用命令ls –a
在最简单的形式下,.forward文件可以只有一行;这一行的内容应该是目的方的e-mail地址。例如,如果在主机some.where.com上的用户user1希望他们的所有邮件都转寄给E-mail地址user2@some.where.else.com,这个用户可以在他们的home目录里创建一个.forward文件,包含下面一行内容:
user2@some.where.else.com
Sendmail就会自动的把user1@some.where.com收到的所有邮件转发给user2@some.where.else.com。尽管这里存在一些问题。
主要问题就是在原来的user1的收件箱里没有保留消息的任何备份。消息被转发了出去,唯一存在的拷贝就是在some.where.else.com上的user2的收件箱里。幸运的是,Sendmail的.forward机制提供了一个也在本地用户的收件箱里保留复本的转发邮件的方法。要做到这个,需要在.forward文件的开始增加另外一行:
“\user1”
user2@some.where.else.com
第一行告诉Sendmail把消息转发给本地用户user1,这就意味着消息将被保存在最初的目的方user1@some.where.com的收件箱里。和前面的例子一样,第二行告诉Sendmail把邮件的一个拷贝转发给user2@some.where.else.com。
这个例子突出了一个重点:可以把邮件转发给几个e-mail地址。例如,如果你在休假,希望在你离开期间把你的邮件分发给三个同事处理,你可以把这三个同事的e-mail地址全部包含在你的.forward文件里:
colleaque1@some.where.com
colleaque2@some.where.com
colleaque3@some.where.com
这将把你收到的所有邮件转发给.forward中的三个e-mail地址。同样的,你也可以把邮件转发个多个地址而在原来的目的方(本地)收件箱里保留副本:
“\user1”
colleaque1@some.where.com
colleaque2@some.where.com
colleaque3@some.where.com
大多数种类的Unix都提供了一个休假通知程序,可以设置成给收到的邮件自动回复一个标准的休假通知。
对于大多数Linux发行版本,你需要从Internet上下载一个休假通知程序。你可以在http站点上找到一个很好的休假通知程序,它可以和其他Unix系统上的休假通知程序在很大程度上兼容,这个休假通知程序在一个叫做vacation.tar.gz的磁带存档文件中。首先把该文件下载到一个方便的位置,然后用下面的步骤安装软件。要成功安装休假通知程序你需要用root登陆:
在Linux命令行下,用cd命令把当前目录变到你保存休假通知程序的tar文件的目录。
用命令tar xzvf vacaion.tar.gz解压文件。文件将被解压到当前目录下的一个名叫vacation的子目录中。
用命令cd vacation把你的当前目录转到这个新的子目录中。
用命令cp vacation /usr/local/bin/把vacation程序拷贝到/usr/local/bin目录。
用命令chmod +x /usr/local/bin/vacation把拷贝来的vaction程序变成可执行程序。
用命令ls /usr/local/bin/per检查你是否有一个指向perl可执行程序的链接。如果Linux返回错误提示ls: /usr/local/bin/perl: No such file or directory,那么在/usr/local/bin/perl中就没有必需的连接。在这种情况下你需要用ln –s /usr/bin/perl /usr/local/bin/perl来创建这个连结。
检查你的Linux类别看你是否使用了smrsh。可以使用命令ls /etc/smrsh做到。如果Linux返回错误提示 ls: /etcsmrsh: No such file or directory,那么你的系统上就没有smrsh并且已经结束安装vacation程序。如果Linux返回/etc/smrsh,那么你就使用了smrsh,并且需要用命令ln –s /usr/local/bin/vacation /etc/smrsh/vacation在这个目录创建一个指向vacation程序的连接。
一旦安装了vacation程序,每个个人用户都可以给他们的账号设置一个自动的休假通知。方法是登陆到他们自己的账号下,在命令行中输入这个命令:vacation。
休假通知程序将在你的home目录下创建一个休假通知消息文件.vacation.msg。此文件里包含一个默认的消息。当vacation程序提示你”Press ‘return’ or ‘enter’”时,按下回车键。这时vacation程序将会用默认编辑器打开这个活动消息文件。在多数Linux版本中,这个默认编辑器是vi。
这个默认的消息包含三个开头行(Precedence, X-No-Archive和主题)。前两行不要动它们,而可以按照你的愿望编辑主题行。你也可以随意的编辑休假通知的内容,注意无论你在什么地方使用$SUBJECT标志,vacation程序就会在发回休假通知的时候在那个地方插入原来收到的邮件的主题。
在编辑完休假通知以后,保存文件并且关闭你的编辑器。Vacation程序会问你是否打开休假通知特性,这通过在你的home目录里创建一个特殊的.forward文件做到。如果希望你的自动休假通知工作这一步是必需的。输入y然后回车就可以打开休假通知功能。
Vacation程序创建的.forward文件看上去是这样的:
\username, “|/usr/local/bin/vacation username”
#automatically created by the Vacation program
出现的两个username将被你的用户名代替。只有第一行是重要的,第二行只是一个注释,在收到邮件时将被忽略。第一行包含用逗号分开的两部分。注释前的部分保证了所有消息都会被保存在你的收件箱中。第二部分激发vacation程序给你所接收到的消息的发送者自动回复一个休假通知消息。
如果要禁用休假通知功能,你只需要登陆进来重新启动vacation程序。Vacation程序会问你是否关闭休假通知特性。输入y回车就可以关闭。Vacation程序会在你的home目录中删除它创建的.forward文件。
在缺省情况下,当前的Sendmail版本的设计是拒绝spam的。所谓spam是一个描述滥用邮件服务器的术语,包括不希望接收的垃圾邮件和未经许可的使用邮件服务器来发送垃圾邮件。在这个tip里我们把spam定义为未经授权的个人使用一个组织的邮件服务器来转发大量的垃圾邮件。
如果你的组织连在Internet上,并且运行了你自己的邮件服务器,它的正常操作有两方面:发送邮件和接收邮件。但是,它一般用一种限制的方法做这些事情:接收从外部源地址发送给内部地址的邮件,而发送从内部地址到外部地址的邮件。如果你的邮件服务器用来发送外部地址到外部地址的消息,就是转发的情况。发放spam的人希望找到一个进行这样的转发的服务器的原因是这样使得接到spam的人很难追踪spam的真正发送人。
早期的Sendmail深受这个问题的困扰,因为它们的缺省配置和设计原理都允许转发,而且管理员很难在配置文件中建立明确禁用未经许可的转发的规则。在Sendmail8.9.x版本中就不是这样了:未经许可的转发被自动禁用,你需要在你的规则集合中明确规定可以允许哪些类型的转发。
初看起来这种方法是很理想的:禁止所有的转发,保证你的系统完全的安全。在实际中,这是没有意义的。在它的缺省状态下,Sendmail只会发送使用本机的客户的外发邮件。在网络环境下,用户在他们各自的桌面系统上使用邮件的客户端软件,但是需要通过网络的邮件服务器转发向外发的邮件。在这种情况下显然是有问题的。
这可以通过配置你的m4文件解决(参见在Tip133中讨论的,“用M4配置Sendmail”),增加下面的指示:
FEATURE(‘relay_entire_domain’)
这条指示指出在你的域内的所有机器都可以通过这台邮件服务器转发。如果你在你的网络上运行了域名服务(DNS,Domain Name Service)并且所有的用户桌面都拥有标识他们的DNS条目,就可以使用这个方法。DNS在Tip863“理解DNS”中介绍。
Sendmail的反spam设施的另一个方面是它将拒收来自不可解析的域的邮件。这就是说当邮件服务器接收到一条要转发的消息时,它首先察看源e-mail地址,抽取出地址中的域名的部分(在@符号后面的部分)并且试图用DNS解析域名。这样做是因为许多发放spam的人会使用假的域名来防止垃圾邮件的接收者的回复。
但是,如果邮件服务器在防火墙之后,不能用DNS解析外部域名,那么这条规则就会导致一个问题:Sendmail会拒收所有外来的邮件。下面的一条在m4文件中的指示能够告诉Sendmail可以接收这些消息:
FEATURE(‘accept_unresolvable_domains’)
这不意味着可以转发,只是可以接受不可解析的域发来的消息,并在本地转发。
如果你在一个远程的mail服务器上收取邮件,并且一般用一个POP邮件阅读器如Netscape Messenger, Outlook Express, Eudora或Pegasus Mail来读邮件,那么你可以用fetchmail工具在有序的基础上取得邮件并且把它传给你的Linux系统上的本地收件箱。
Fetchmail是红帽子Linux6.0发行版本上的一个工具。如果你运行了红帽子Linux6.0,你可以检查一下是否在你的系统上安装了一个完全版的fetchmail,命令如下:
#rpm –qa|grep fetchmail
你的系统应该显示下面的结果:
fetchmail-5.0.0-1
fetchmail-conf-5.0.0-1
如果缺少这些文件中的任何一个,你就需要从红帽子的安装光盘上安装这个工具(如果是红帽子的标准安装,那么fetchmail-conf-5.0.0-1就不会被装入)。把安装盘插入光驱,用下面的命令装载:
#mount /mnt/cdrom
然后,用rpm工具安装每一个缺少的文件:
#rpm –i /mnt/cdrom/RedHat/RPMS/
你应该用下面的文件列表中的合适的文件名来替代上面命令中的
l Fetchmail-5.0.0-10.i386.rpm
l Fetchmail-conf-5.0.0-1-.i386.rpm
一旦装上了Fetchmail,你就可以在/usr/bin/fetchmail中发现fetchmail程序。这个软件允许用户取到一个POP或IMAP收件箱里的邮件,并且传递到他们自己的本地收件箱。
例如,如果你在一个名叫pop.server.com的远程邮件服务器上拥有一个POP收件箱,你的用户名和口令分别是remoteuser和remotepass,那么你可以发出下面的fetchmail命令来获得你的邮件:
#fetchmail –keep –protocol pop3 –username remoteuser pop.server.com
Fetchmail将使用POP3协议连结到pop.server.com,并且试图以remoteuser的身份登录。然后它会提示你输入此服务器上的remoteuser用户的口令。如果你提供了正确的口令,那么在pop.server.com上你的收件箱里的所有邮件就会被下载到你的本地收件箱。
要理解在线和离线阅读器的区别,区分开本地和远程邮件箱是很重要的。
在多数类Unix的系统上,我们的邮件是以一种标准的格式存储在邮箱里。这种格式就是众所周知的Berkeley邮件文件夹,取这个名字是因为它是由加利福尼亚大学Berkeley分校首创的。许多Unix邮件服务器包括Sendmail都可以直接用这种格式工作,把收到的消息直接传递给这些邮件文件夹。
然后,用户就可以用各种各样的基于Unix的e-mail阅读软件直接阅读或者处理同样的邮箱文件。这种方法在服务器和邮件阅读软件都运行在Unix和Linux上并且使用同样的Berkeley邮箱格式的局域网(LAN)上工作得很好。
然而,对于家庭用户,一般模型是用户的邮箱在一个有Internet提供商管理的远程服务器上。远程服务器上的邮箱事实上可能是Berkeley格式,用户无法在家里直接操作。代替的是,用户通过一个POP3或IMAP服务器访问邮箱,并且把他们的邮件下载到他们家里的本地邮件阅读器上,他们就可以操作他们的邮件了。
在基础层次上,本地和远程的邮箱的区别反映出了在线和离线邮件阅读器的区别。一些阅读器可以同时充当两种角色,他们的区别也是简单的:
l 离线阅读器允许用户访问远程邮箱,通常是通过POP3。用户可以下载他们的邮件,在离线状态下对邮件进行处理,然后重新连接远程服务器,发送他们所写的消息并且从他们的邮箱里下载新的消息。用户不是实时地直接和他们的邮箱打交道,大部分工作(读消息、回答消息、撰写新的消息和删除消息)发生在用户处于离线状态时,用的是事先从远程邮件箱下载的消息。
l 在线阅读器允许用户直接处理他们的本地邮箱(尽管有些情况下IMAP可以用来直接操作远程邮箱)。在线和离线阅读器的主要区别就是在用户读、回答、撰写河删除消息时要始终在线。因此,但一条消息写完以后,就可以马上被发送。而当一条新的消息到达它的收件箱时,用户也可以马上看到。
许多Linux发行版本包含Elm邮件阅读器。Elm长期以来都是Unix世界里优秀的在线邮件阅读器之一。Elm提供了一套强大的功能集,一个健壮的过滤系统和在新的邮件阅读器中常常不具备的能力。令人注目的是这是在一个仍然保持着简单的文本界面,没有任何现代的图形软件帮助的应用程序中做到的。
如果你运行了红帽子Linux6.0,Elm就在其光盘中。你可以用下面的命令检查Elm是否已被安装:
#rpm –qa|grep elm
你的系统应该返回下面的结果:
elm-2.5.0-0.2pre8
如果没有这个文件,你就需要从光盘上安装。把光盘方进光驱,用下面的命令装载:
#mount /mnt/cdrom
下面,用rpm工具安装缺少的文件:
#rpm –i /mnt/cdrom/RedHat/RPMS/elm-2.5.0-0.2pre8.i386.rpm
如果在你的Linux版本上没有包含Elm,你可以从SunSite上下载一个最新的Elm版本,网址是:。按照你在那里找到的Elm的指导安装这个软件。到写本书为止,最新的版本是elm-2.4p25pgp3.tar.gz。下载以后一可以用下面的命令解压文件:
#tar xzvf elm-2.4pl25pgp3.tar.gz
Elm是一个在线的Linux和Unix邮件阅读器,它可以允许用户在Linux上读取他们的标准Berkeley格式的邮件文件夹。图141.1是Elm的示意:
Production : place bitmap XT_O141a.BMP
图 141.1 Elm界面
缺省情况下,对于标准的基于Sendmail的Unix邮件系统或者相似的系统,Elm不需要特别的配置就可以用作在线邮件阅读器。Elm的一个限制是它要求Sendmail也要运行在同一台本地主机上,或者是暂时的替代Sendmail的软件(比如Smail)来发送邮件。它不能通过网络上另一台机器上的邮件服务器转发邮件。
要学习Elm配置的其他方面可以参考Elm站点。这个站点的示意如图141.2:
图 141.2 Elm Web站点
许多Linux发行版本都包含Pine邮件阅读器。Pine是在Elm之后开发的作为另一个可选择的邮件阅读器。事实上,Pine的打算是“Pine不是Elm”。作为和Elm不同的软件,Pine和Elm一样强大而且有可能比Elm拥有更广泛的用户基础,尽管对于自由软件来说这是很难衡量的。和Elm一样,Pine使用的也是简单的基于文本的界面。
如果你运行了红帽子Linux6.0,Pine就包含在其光盘中。你可以用下面的命令检查Pine是否已被安装:
#rpm –qa|grep pine
你的系统应该返回下面的结果:
pine-4.10-2
如果没有这个文件,你就需要从光盘上安装。把光盘方进光驱,用下面的命令装载:
#mount /mnt/cdrom
下面,用rpm工具安装缺少的文件:
#rpm –i /mnt/cdrom/RedHat/RPMS/pine-4.10-2.i386.rpm
Caldera OpenLinux2.2也包含有Pine。你可以用下面的命令检查Pine是否已被安装:
#rpm –qa|grep pine
你的系统应该返回下面的结果:
pine-4.10-1
如果没有这个文件,你就需要从光盘上安装。把光盘方进光驱,用下面的命令装载:
#mount /mnt/cdrom
然后,用rpm工具安装缺少的文件:
#rpm –i /mnt/cdrom/col/contrib/RPMS/pine-4.10-1.i386.rpm
如果在你的Linux版本上没有包含Pine,你可以从Pine的Web站点()上下载,图142.1是该站点的示意:
图 142.1 Pine Web Site
Pine的Web站点提供了一系列预先编译好的在不同平台上运行的Pine的版本,包括Windows、Linux和一系列的商业Unix。在该站点也可以找到安装说明。
缺省情况下,Pine要求作为一个本地Unix的在线邮件阅读器并且假定你的系统上有一个用来发邮件的本地邮件服务器。
但是,Pine是很灵活的,可以配置成IMAP服务器上邮件的在线阅读器,并且能够通过远程的Sendmail或兼容的邮件服务器转发向外发送的邮件。
要配置Pine使之能够阅读远程IMAP邮件箱而不仅是本地Unix邮箱,按照下面的步骤:
l 用pine命令启动pine。Pine的打开界面将被显示。
l 键入s进出安装模式。键入c选择Pine配置。Pine的安装配置界面将被显示。安装界面如图143.1所示。
图143.1 Pine安装界面
l 用上下箭头移动光标寻找以inbox-path开始的那一行。按下ENTER键。你就可以在屏幕的底部编辑这一行。要从IMAP服务器读邮件,使用语法:SERVERNAME{INBOX}。SERVERNAME是你的IMAP服务器的名字或IP地址。按ENTER键提交你的改动。
l 键入e退出安装模式。
要配置Pine使之使用一个可选的邮件服务器来发送消息而不是用本地服务器,可以按照下面的步骤:
l 用pine命令启动pine。Pine的opening界面将被显示。
l 键入s进出安装模式。键入c选择Pine配置。Pine的安装配置界面将被显示。
l 用上下箭头移动光标寻找以smtp-server开始的那一行。按下ENTER键。你就可以在屏幕的底部编辑这一行。要从IMAP服务器读邮件,使用语法:SERVERNAME{INBOX}。SERVERNAME是你的IMAP服务器的名字或IP地址。按ENTER键提交你的改动。
l 键入e退出安装模式。
l 当提示替换配置时,键入y保存你的改动。