在FreeBSD上查看邮件
FreeBSD上的用户可以通过mail程序来查看自己的Email,mail是一个最基本的交互式Unix 命令,可以运行在任何类型的终端上,然而使用它来处理邮件也很不方便。使用者常常安装其他更 为便利的电子邮件客户程序来处理自己的邮件,这些软件有elm、mutt、pine,以及只用于X下的 netscape messager、kmail等。
虽然基于X的邮件处理软件比较方便和易于学习,然而通过网络远程直接使用这些X程序比 较麻烦,不是任何计算机上都运行了X服务器的。而几乎所有的计算机系统中都支持telnet等字符 终端连接软件,使用支持字符终端的邮件处理程序就使得使用者无论身在何处,只要连接到自己的 主机上就能处理自己的电子邮件。
在远端访问自己的电子邮件的另一种方式是:首先在远端的客户机上安装、配置电子邮件 软件,再使用这些软件访问自己主机上的邮件。这些远程访问邮件服务器的软件使用POP3协议或者 IMAP协议,让用户查看远程计算机上的邮件。
这两种方式的不同在于邮件处理软件的安装位置,安装在主机上的邮件处理程序基于X或字 符终端,不需要改动客户计算机上的任何配置,因此适用于经常改变客户机的使用者。安装在客户 机上的用户可以充分发挥客户计算机的优势,例如MS Windows的用户界面,这种方式适用于拥有固 定个人用计算机的使用者。这两种方式并不相互冲突,而是相互补充的,适合不同情况的使用者。
- 邮件处理程序pine
由于基于字符终端的邮件软件启动快捷,能通过telnet等防真终端使用,而不需改变客户计 算机的任何配置。因此Unix的使用者至少都会选择安装一种基于字符终端的邮件处理软件,以作为 最基本的邮件处理软件。pine就是其中之一,它提供了简洁的字符菜单界面,功能强大且易于操作, 易用性超过很多图形接口的邮件处理程序。
在Pine的主菜单下,可以执行发送电子邮件(Compose message),查看当前文件夹的内容 (Message index),选择不同的文件夹(Folder list),使用和维护地址簿(Address Book), 使用S(Setup)用于设置Pine,使用Q(Quit)退出pine回到shell提示下。正常情况下,不需要对 pine进行任何设置,就能正常使用pine阅读和发送电子邮件。
然而当使用pine来发送中文邮件时,pine会对中文进行重新编码,以适应7位传输,虽然大 部分电子邮件客户都会识别这些标准的编码格式,但还是有一些电子邮件程序不能识别出这些编码 ,造成阅读问题。此时就可以重新设置pine直接使用8位编码。
在主菜单下选择Setup,当出现提示时,使用Config进入配置部分。就可以搜寻包含enable-8-bits 的两个选项,配置自己使用的字符集(由于pine中不直接支持中文字符集,可以设置为ISO-8858-1) ,以支持8位字符。
还可以在这里设置Pine来阅读Usenet新闻,这就要在nntp-server的选项中填写本地新闻服 务器的域名,并配置news-collections选项,例如本地新闻服务器的名字为news,那么news-collections 就应设为 ”*{news/nntp}/[]”。也可以设置远程文件夹,使得Pine能访问远程主机上的邮件。
Pine缺省支持使用IMAP协议访问远程主机上的邮箱,但它对POP3的支持未在其文档中公布, 不能使用设置程序来完成。可以手工更改用户个人目录下的配置文件.pinerc中的选项incoming-folders, 以支持POP3,下面为一个例子:
incoming-folders="imapfolder" {imaphost}INBOX, "pop3folder" {pop3host/pop3/user=wb}INBOX |
这个例子中配置了两个远程帐户,一个为imaphost上的邮箱,使用IMAP协议进行访问,在 pine中的文件夹名为imapfolder,第二个为pop3host上的邮箱,后面使用/pop3指明使用pop3协议 ,/user=wb指明使用wb作帐户名,其文件夹的名字为pop3folder。使用这样的格式就能使pine来管 理多个计算机上的多个邮箱。
那么再次启动pine就能有位于不同主机上的相应incoming和nntp文件夹,用户打开相应的文件 夹就能使用imap、pop3或nntp等不同协议,访问相应的邮件或新闻了。
- 使用fetchmail管理多邮件帐户
尽管使用pine能非常方便的管理多个POP3或IMAP邮箱,但是如果邮箱主机与当前FreeBSD系 统的网络连接很慢,使用pine来阅读这些邮箱中的邮件就非常迟缓。此时更好的办法是先在后台将 邮件取到回本地邮箱中,然后使用pine或其他邮件处理程序进行处理。
fetchmail就是一个非常方便的从远程邮件主机下载邮件的应用软件,它支持pop3、imap, 以及对pop3的一些扩展协议。当安装好fetchmail之后,使用者可以直接启动fetchmail,来取得邮 件的方法为:
$ fetchmail -p pop3 -u wangb email.online.ha.cn passWord for wangb@email.online.ha.cn: |
在输入正确的口令之后,fetchmail将使用pop3协议访问主机email.online.ha.cn,并取回 用户wangb的电子邮件,取回的电子邮件将发送到本地邮箱中。也可以用更复杂的方式在后台运行 fetchmail,则需要设置个人目录下的.fetchmailrc文件。
$ cat ~/.fetchmailrc poll email-wangb via email.online.ha.cn protocol pop3 authenticate password username wb here is wangb there password "1111" smtphost localhost pass8bits stripcr fetchall $ chmod 700 ~/.fetchmailrc |
设置文件中第一行poll email-wangb via email.online.ha.cn中设置了要下载邮件的邮件 服务器为email.online.ha.cn,其中email-wangb为对应这一个帐号的标签名字,用于区分多个不同 的邮箱。然后指定使用的协议为pop3,认证方式为标准的Unix口令认证,然后,定义了远端主机上 的邮件帐户名为wangb(用there表示远端主机设置),邮件下载到本地用户wb的邮箱中(使用here 指明本地主机设置)。
smtphost定义了fetchmail用来转发邮件时使用的smtp主机,passsword定义了远程邮件服务 器中帐户的口令,在口令中使用了数字或特殊字符时,就需要使用双引号将口令括起来。pass8bits 允许下载邮件中存在8位字符,stripcr用于过滤额外回车字符,由于Dos和Unix在文本定义上的不同 ,这一项用于兼容一些不识别这个差异之处的Windows系统的邮件服务器,fetchall表示取回全部邮 件,否则就只取回最新的邮件。
此外,这个文件因为包括了远端服务器的口令,因此必须具备属性700,以避免其他用户能读 取这个文件,否则fetchmail不会运行。
这样,就可以不使用任何命令行参数,直接在后台运行fetchmail了。每个用户可以使用cron来运 行自己的fetchmail命令,来管理自己的邮件,而拨号用户可以在拨号后,使用ppp.linkup启动fetchmail ,取回自己的邮件。
- 使用Procmail设置邮件过滤
由于Internet的使用者不但使用电子邮件和朋友、同事联系,而且还通过maillist与Internet 上的其他使用者讨论共同感兴趣的话题,用户收到的电子邮件越来越多,并且还会受到广告、宣传品 等垃圾邮件的骚扰。使用Promail、maildrop等邮件过滤程序就能帮助使用者阻挡这些广告和宣传品, 并帮助管理用户接收到的邮件。Procmail就是一个用于过滤用户接收到的电子邮件,并能对其自动分类 、处理的一个应用软件。对于每天都会收到大量电子邮件的Internet使用者,这是一个非常有用的工具。
为了使用Procmail,必须在用户接收到Email时,启动Procmail进行处理。这个任务可以使用 两种不同的方式来完成,一个是将Procmail配置为系统的邮件分发代理(Mail DelIEry Agent),系 统的邮件服务器使用porcmail代替其本身原有的邮件分发功能,来分发用户的邮件。这种方式需要由 系统管理员根据邮件服务器的不同,而进行不同的设置。
另一种方法是使用个人目录下的.forward文件,系统邮件服务器在给某个用户分发邮件的时候, 如果发现他的个人目录中存在.forward文件,那么就会按照这个文件中的内容来进行处理。因此就可以 在.forward文件中启动procmail处理用户接收到的邮件,与更改系统MDA的设置方式相比,这种方式更为 灵活,并且可以由每个用户来决定是否使用这个过滤处理能力。
.forward文件可以按照需要设置三种不同的处理方式:定义存储邮件的邮箱文件名、进行转发 的目的地址或者对电子邮件进行处理的外部应用程序,显然启动Procmail是应使用第三种方法。
.forward文件应该属于这个用户(或root),并且其权限设置应该为不能被其他或同组用户可写。
$ cat ~/.forward "|IFS=' '&&exec /usr/local/bin/procmail -f-||exit 75 wb" |
这个.forward的例子里,使用"|"字符设置括号内的参数为一个执行命令,这样 sendmail就能启动一个shell执行设置的命令,并使用管道的方式读取sendail的输出。执行命令中首 先定义了IFS环境变量(用于分隔不同的域),然后执行procmail,如果procmail执行失败就执行 exit 75 wb告诉sendmail,邮件分发失败,需要更改wb为使用者自己的登录名。
procmail使用用户个人目录下的.procmailrc文件,来设置对收到的Email进行处理的过滤规 则。最简单的.procmailrc文件为:
:0c: * ^FROM.*@freebsd.org $HOME/mail.backup |
第一行首先使用冒号开始定义一个过滤规则,紧随其后的应该是一个数字,这个数字规定了这 个规则占用的配置行数,一般使用0表示没有限制配置行,此后的c表示复制(copy),表示下面的规则 只是用于处理邮件的副本,而邮件本身仍然会被其他的过滤处理规则处理。这一行最后的冒号,用于表 示在处理过程中进行加锁,防止同另一个procmail进程处理同一个文件时发生冲突,通常这个机制在存 储邮件文件时非常有帮助。
第二行就开始了一个过滤规则的定义,过滤规则使用*字符开头。一个规则中使用模式匹配来匹 配电子邮件信头或内容中的特定行。上面例子里的这个规则匹配所有来自于freebsd.org的电子邮件。 在第三行定义了对符合上面规则的邮件的处理方法,由于给出了一个文件名mail.backup,因此将所有 来自于freebsd.org的电子邮件添加到mail.backup文件中保存。如果使用!开头定义规则处理办法,表 示进行转发处理,!后面就为进行转发的电子邮件的地址,或者以|开头,表示启动后面的命令进行邮件 处理。
procmail不区分大小写,它使用Unix最常用的模式匹配方式进行匹配特定的邮件。因此使用这 些匹配模式和procmail规则,可以定义一个更复杂的.procmailrc:
PATH=$HOME/bin: /usr/bin: /usr/ucb: /bin: /usr/local/bin:. SHELL=/bin/sh MAILDIR=$HOME/mail DEFAULT=$MAILDIR/mailbox LOGFILE=/dev/null SENDMAIL=/usr/lib/sendmail :0: * ^From.*badguy /dev/null/ :0c: * ^(From|Cc|To).*freebsd.org | gzip >> freebsdmail.gz :0: * ^From.*@hotmail.com * ^Subject:.*(joke|funny) { :0 c ! friend1@hotmail.com friend2@usa.net :0 joke } :0 * ^Subject:.*order * !^FROM_DAEMON * !^X-Loop: marketing@company.com { :0 h c | (formail -r -A"X-Loop: marketing@company.com " ; cat /market/acknowlegement.txt ) | $SENDMAIL -t :0 c ! market2@company.com :0 market } |
这个配置文件的第一部分中设置了几个环境变量,用于设置procmail的运行环境,其中将 MAILDIR设置为~/mail,与pine使用的目录相同,因此这将使pine能直接读取procmail处理过的邮 件。
第二部分中为邮件定义了三个不同的过滤规则及相应的处理操作,第一个规则将来自badguy 的邮件滤掉(输出到/dev/null);第二个规则将与freebsd.org的通信使用gzip保存到freebsdmail.gz 中,用于保存相应maillist的邮件;第三个规则将某个使用hotmail帐号的朋友,并使用joke或funny标 题给自己发送笑话的邮件同时转给其他几个朋友,并同时保存在joke文件夹中;最后一个规则是设置了 一个自动回复邮件系统,对于使用order做标题,并且没有FROM_DAEMON行(自动邮件回复程序使用FROM_DAEMON 作标记,通常不需要回复这些的邮件,否则会造成回复循环),并且没有包括X-Loop行的邮件进行处理:
首先将X-Loop行添加到邮件中(使用formail将它们添加到mail的信封上),以免造成对同一个邮件的 循环处理,然后将文件/market/acknowlegement.txt发回给发送者;并以及转发邮件,在market中保存邮件。
根据这些规则,使用Procmail就能完整的处理各种邮件,减轻电子邮件不断增多而造成的困扰。
标签: