MailDrop 研习心得
引用: 最近对邮件系统感兴趣,同时垃圾邮件、病毒邮件日益增多,反垃圾和病毒使邮件系统管理者的当务之急。 procmail研究了一下子,不知道为什么,过滤规则可以执行,但是我的信件本来要拦截的,却照发了;没办法,继续研究MailDrop,这几天小有成果,虽然还不是融会贯通,但至少能够按照我的要求来拦截垃圾邮件啦。 不过不知道有没有同好,如果有同好,给些意见,给些鼓励,给些经验。 我自己仔细研读了maildrop的英文资料,看看原版资料,真是受益匪浅,所以想在这里和大家共享一下子。 明天要上班啦,所以一下子不能完成,这个星期就慢慢来写哦。 不发没有人看的东西,所以也有人支持我就发,没任何支持那就算啦。
大家支持,我基本完成啦,不过还只能算是手稿,已经可以对域过滤啦,对单用户过滤啦!!! 如果大家有好的建议想法经验心得体会笔记,如果愿意被我“剽窃”到这里来,可以提出哦
近期相关疑问:
注意=Vpopmail(<5.3.7+)的MailDrop域过滤的问题和解决方案
MailDrop 域过滤规则和单用户过滤规则对照
MailDrop基本运用
1、前提条件: 我的参照系统:FreeBSD+Qmail(Vpopmail)+MailDrop
2、如何设置: (1)、域过滤 (a)、构想:代码: 应用过滤规则 被过滤信件发送到spam 其他用户信件照常分发 不存在的用户则返回信息
(b)、配置: file:/path/to/vpopmail/domains/HOST/.qmail-default 代码: | preline /usr/local/bin/maildrop ./.filter
file:/path/to/vpopmail/domains/HOST/.filter 代码:
import EXT import HOST VPOP="| /home/vpopmail/bin/vdelivermail '' bounce-no-mailbox" VHOME=`/home/vpopmail/bin/vuserinfo -d $EXT@$HOST` logfile "/var/log/mail/maildrop/$HOST" if (/过滤规则/) { to "/home/vpopmail/domains/$HOST/spam/Maildir/." exit }
#to "$VPOP" #低于5.3.7+版本的Vpopmail的多管道存在问题,所以用以下变通方法
`test -d $VHOME/Maildir/` if( $RETURNCODE != 1 ) { to "$VHOME/Maildir/." exit } else { echo "Sorry , no this user" EXITCODE=77 exit }
(1)、单用户过滤 (a)、构想:代码: 应用过滤规则 被过滤信件发送到spam 其他信件照常分发
(b)、配置: file:/path/to/vpopmail/domains/HOST/EXT/.qmail 代码: | preline /usr/local/bin/maildrop ./.filter
file:/path/to/vpopmail/domains/HOST/EXT/.filter 代码:
import EXT import HOST VHOME=`/home/vpopmail/bin/vuserinfo -d $EXT@$HOST` logfile "/var/log/mail/maildrop/$HOST"
if (/过滤规则/) { to "/home/vpopmail/domains/$HOST/spam/Maildir/." exit }
to "$VHOME/Maildir/."
3、MailDrop的一些语句 代码: ` ... ` 执行外部程序,返回码为RETURNCODE,通常1表示不成功,其他表示成功执行
cc 转发信件
logfile MailDrop日志文件
log 记录信息
to 分发信件
echo 返回信息
xfilter 执行外部过滤程序
exit 退出过滤
import 输入环境变量
4、控制语句 (1)基本控制语句: 代码: if (表达式) #表达式格式:(表达式1) [ || (表达式2) ((表达式3)&&(表达式4)) ] { ...语句... } else { ...语句... }
(2)、操作符: 代码:
|| && < <= > >= == != 数值比较 lt le gt ge eq ne 文本比较 | & + - * / =~ /pattern/ /pattern/ ! ~ function()
5、常用函数 代码: getaddr(string) 从字符串提取邮件地址 hasaddr(string) 在信件之中查找邮件地址 length(string) 字符串长度 substr(string,start [,count]) 从字符串去除部分字符 time 返回当前时间 tolower(string) 转换为小写 toupper(string) 转换为大写
6、MailDrop的一些变量 代码: EXITCODE 退出码,返回给qmail的处理程序 LINES 当前信件的行数 MAILDIRQUOTA 用户的Quota RETURNCODE 返回码,执行外部程序的返回码 SIZE 信件的大小
7、过滤规则: 代码: 语法:/pattern/
代码: x* 匹配任意个x
(abc)* 匹配任意个abc
x+ 匹配至少一个x
(abc)+ 匹配至少一个abc
x? 匹配至多一个x
. 匹配换行符以外的
(abc)? 匹配至多一个abc
abc!def !用于匹配模式分开的节
[abc] 字符列表匹配,匹配a或者b或者c
[^abc] 非型匹配
x 匹配转义字符
nn 匹配八进制字符
[:alnum:] 任何字母和数字
[:alpha:] 任何字母
[:cntrl:] 任何控制字符
[:digit:] 任何数字
[:graph:] 任何非空字符
[:lower:] 任何小写字母
[:print:] 任何可打印字符
[:punct:] 任何标点符号
[:space:] 任何空白字符
[:upper:] 大写字母
[:wbreak:] 任何字母、数字、下划线之外的字符
[:xdigit:] 任何16进制数
代码: 要匹配特殊字符,需要在特殊字符前面添加一个反斜线。例如,?匹配问号。匹配反斜线,使用。 放置^在表达式前表示匹配一行开始的部分。放置$在表达式后表示匹配一行的结尾。 在表达式的其它地方,$标记用作变量替换。要匹配$字符,需要在前面添加反斜线
特殊字符 代码:
换行符
回车符
制表符
f 换页符
v 垂直制表符号
更多... 8、相关连接: 注意=Vpopmail(<5.3.7+)的MailDrop域过滤的问题和解决方案
MailDrop 域过滤规则和单用户过滤规则对照
maildrop的一些基本用法
用maildrop实现域过滤规则
maildrop于subject使用base64编码 此方法可用于过滤中文
9、感谢: 严重感谢所有软件的开发者 严重感谢相关文档和资料的提出者 严重感谢以上提到的资料中的相关人员 严重感谢一切支持的人们 特别感谢hzqbbc 、gadfly、artxing等的热情帮助
10、附加: 如果你懂得了Unix Shell或者Perl或者C等等,你懂得了正则表达式的运用,那么你也可以写出更好的应用来得。是懂得了而不是懂得 因为我的主要工作不是在邮件系统方面,所以算不上深刻体会,有一些东西也是生搬硬套而来的,还不能融会贯通触类旁通举一反三,所以如果大家有好的想法和意见,好的经验和心得体会,同样可以告诉大家,不,不管什么意见都可以告诉大家。
|