分类: BSD
2008-04-03 16:42:09
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等不同协议,访问相应的邮件或新闻了。
尽管使用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 ,取回自己的邮件。
由于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就能完整的处理各种邮件,减轻电子邮件不断增多而造成的困扰。