.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/shMAILDIR=$HOME/mailDEFAULT=$MAILDIR/mailboxLOGFILE=/dev/nullSENDMAIL=/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:0joke}: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:0market}这个配置文件的第一部分中设置了几个环境变量,用于设置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中保存邮件 。
推荐阅读
- FreeBSD nessusd命令介绍
- u盘在汽车上读不出来怎么回事
- 马邦妮结局是和谁在一起了
- 暴走世界杯在哪玩 微信暴走世界杯玩法介绍
- 开斋节有什么习俗 开斋节是什么
- FreeBSD trafcount命令介绍
- 怎样从根源上防治棚菜病虫害
- 77 FreeBSD连载:安全工具
- 65 FreeBSD连载:SMB/CIFS协议
- 种植油葵存在的问题
