Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5351719
  • 博文数量: 1144
  • 博客积分: 11974
  • 博客等级: 上将
  • 技术积分: 12312
  • 用 户 组: 普通用户
  • 注册时间: 2005-04-13 20:06
文章存档

2017年(2)

2016年(14)

2015年(10)

2014年(28)

2013年(23)

2012年(29)

2011年(53)

2010年(86)

2009年(83)

2008年(43)

2007年(153)

2006年(575)

2005年(45)

分类: LINUX

2007-04-01 18:03:44

maildrop是一个替代邮件代理并且包含邮件过滤的语言,系统管理员用
这个maildrop即可以取代已经存在的邮件投递代理,或者用户可以用已
经存在的邮件投递代理的'forward to
program'机制来取代来运行maildrop.
maildrop首先从标准输入读取E-mail信息,其后面所带的回车符号将自动
被删除,一个E-mail信息包含header lines 后面跟着一个空行,然后跟
着信息的内容,信息的内容也可能在第一个header lines
之前包含mbox-style From_ line,如果信息内容没有包含From_line,那
么maildrop将自动创建一个.
如果文件/etc/maildroprc存在,邮件投递或邮件过滤将从/etc/maildro
prc中读出。maildrop的投递/过滤指令可能把信息保存在一个特殊的mai
lbox,或者丢弃它,或者返回给发送者,或者转发到不同的邮件地址。
如果文件/etc/maildroprc不存在,或者邮件投递或邮件过滤没有完全的
处理信息,这时maildrop将从$HOME/.mailfilter读取规则,如果.mailf
ilter不存在,或者邮件投递或邮件过滤没有完全的处理信息,maildrop
将保存E-mail信息到默认的mailbox里。

maildrop知道怎样投递到一个标准的mailbox文件,也知道怎样投递到一
个maildirs,maildir格式的目录在Courier和qmail中使用,还有一些邮
件服务器也知道如何去读maildirs。当投递mailbox文件时,maildrop将
锁定mailbox,直到投递结束。
maildrop读取信息的规则为:在From_header之前致少一空行,maildrop
在读取规则时将忽略此空行,因此maildrop要求规则中至少有一个空行。
通常邮件投递模式分为三种(maildrop依赖投递模式的不同也有小小的
差异):
1.手动模式.
一个文件包含过滤指令 例:maildrop -filename(保存过滤指信令的文
件),首先maildrop读取/etc/maildroprc文件里面的指令,然后从filena
me读取过滤指令.如果filename里面没有转发,回复,删除或到一个特殊
的maildox,那么它将投递到系统用户的mailbox中.
2投递模式.
maildrop如果没有指定 -filename时,maildrop将在投递模式运行,maildrop将改变当前目录到用户的的主目录,这时读取/etc/maildroprc,再读取 $HOME/.mailfilter
3 嵌入模式
主要用于Courier上,在此不做阐述.
安全
maildrop在setuid位下安装是安全的。Courier为了让maildrop在嵌入模式下使用因此它的setuid位是默认的。如果root运行maildrop 则-d这个选项会被用来指定这个信息的接受者,maildrop立马会重制用户的ID,读取$HOME/.mailfilter文件,并将信息投递到指定的用户。
系统管理员能通过配置来限制maildrop -d 这个选项是否给每个用户来使用(邮件系统用户本伸除外)
maildrop的(简单)用法:
-A "Header:value"
增加一个附加的头部信息。
-d user
在投递模式设置用户的ID
-f address
设置变量"FROM"为一个地址
-m
在嵌入模式下运行
-M filterfile
在一个特殊的嵌入模式运行
cc dotlock flock log logfile to xfilter
都不能运行在嵌入模式下
(待续)

----------------------------------------------
vi /home/vpopmail/domains/youdomains/user/.qmail #建立.qmail文件
| /usr/local/bin/maildrop ./.mailfilter #使用maildorp程序规则为.mailfilter
vi /home/vpopmail/domains/youdomains/user/.mailfilter #建立.mailfilter文件并添加规则
vi /home/vpopmail/domains/youdomains/user/.qmail #建立.qmail文件
| /usr/local/bin/maildrop ./.mailfilter #使用maildorp程序规则为.mailfilter
vi /home/vpopmail/domains/youdomains/user/.mailfilter #建立.mailfilter文件并添加规则
if (/^Subject: failure notice/) #当主题为failure notice的信件到来时{to "./Maildir/.Trash/." #将信件贮存到垃圾箱}to "./Maildir/." #不符合这个规则的信件正常处理
chmod 600 .qmail #改变文件属性使其可执行
chmod 600 .mailfilter #改变文件属性使其可执行
chown vpopmail:vchkpw .qmail #改变文件的用户和组使其可执行
chown vpopmail:vchkpw .mailfilter #改变文件的用户和组使其可执行
大功告成现在试试是不是带有failure notice主题的信件已被放进垃圾箱中!(完)计算机基础教程网
-----------------------------------------------
三 配置maildrop
配置.qmail-default文件(/home/vpopmail/domains/test.com/.qmail-default)
/usr/local/bin/maildrop ./.mailfilter
 
邮件用户不存在时.qmaildefault的弹信功能在.mailfilter中实现
配置.mailfilter文件(/home/vpopmail/domains/test.com/.mailfilter)
import EXT
import HOST
SHELL=/bin/bash
VHOME=`/home/vpopmail/bin/vuserinfo -d `
`test -d $VHOME/Maildir/`
if($RETURNCODE !=0 )
{
echo "用户不存在" EXITCODE=77 exit
}
if($SIZE < 262144 )
{
 exception{
xfilter "/usr/bin/spamc -f -u "
 }
}
else
{
to "$VHOME/Maildir/."
}
if (^X-Spam-Flag: YES/)
{
to "$VHOME/Maildir/.Trash/." EXITCODE=0
}
else
{
to "$VHOME/Maildir/."
}
 
---------------------------------------------------
maildrop的基本用法
最近看到论坛里一些人专门问到maildrop的用法问题,而对于邮件过滤这一方面也是比较关注的.我就把我使用maildrop的一点心得写出来.其实我也是从sqwebmail或者wmail的使用中找到的(这也是为什么我之前回复都是让大家装一下wmail或sqwebmail使用一下的原因),所以只涉及到了maildrop的一点点基本用法,希望对大家有所帮助.
首先安装maildrop,这个很简单,先去下载
然后解压,进入目录里
./configure
make
make install
一般就可以安装成功.(当然之前要安装了qmail,vpopmail)安装成功后会在/usr/local/bin目录下生成一个maildrop文件.就是使用它来做过滤的
我还是假使wangxu.com为虚拟域,wangxu@wangxu.com为其中一个用户.下面就对所收到的邮件进行一些过滤规则.
进入用户的邮件目录
cd /home/vpopmail/domains/wangxu.com/wangxu
建立.qmail文件.
vi .qmail
内容为:

CODE:[Copy to clipboard]|/usr/local/bin/maildrop ./.mailfilter
注意.qmail文件的属性
chmod 600 .qmail
chown vpopmail:vchkpw .qmail
再建立.mailfilter文件
vi .mailfilter
内容为:

CODE:[Copy to clipboard]##Op:contains
##Header:FROM
##Value:test@test.com
##Folder:*收信人拒收您的邮件
##From:
##PlainString
##Name:过滤发件人包含的信件

if ((/^FROM:.*test\@test\.com/))
{
    echo "收信人拒收您的邮件"
    EXITCODE=77
    exit
}
##Op:contains
##Header:FROM
##Value:test@test.com
##Folder:.Trash
##From:
##PlainString
##Name:将发件人包含的信件保存在垃圾箱

if ((/^FROM:.*test\@test\.com/))
{
   to "./Maildir/.Trash/."
}

to "./Maildir/."
其中##后面的都为注释部分,可以不去管它.
if ((/^FROM:.*test\@test\.com/))
{
    echo "收信人拒收您的邮件"
    EXITCODE=77
    exit
}
这一段表示发信人地址中包含的就拒绝接受,并回复发信人一封拒收信件,内容说明原因"收信人拒收您的邮件".其中的EXITCODE=77不加也可以(过滤整个域的信件也可以这样用,大家自己想想)
if ((/^FROM:.*test\@test\.com/))
{
   to "./Maildir/.Trash/."
}
这一段表示发信人地址包含的就自动转移到垃圾箱.
注意最后一句to "./Maildir/."
它表示当不符合上面所提到的过滤规则时的邮件就正常的发到的信箱里.
这句一定要有,不然会收不到信的.
同时也要注意.mailfilter的属性和.qmail是一样的
chmod 600 .mailfilter
chown vpopmail:vchkpw .mailfilter
下来就发测试信试试吧.
这只是maildrop的一点基本的用法.比较完整的用法大家可以去这里

 
__________________________________
前天写了篇用maildrop实现单个用户的过滤方法.有时候整个域的管理都要用到过滤规则.琢磨了一下,把我的实现方法整理出来,请大家指正.
安装maildrop就不在重复了
进入域所在目录
cd /home/vpopmail/domains/xxx.com
编辑.qmail-default文件
vi .qmail-default
内容为:
|/usr/local/bin/maildrop ./.mailfilter
| /home/vpopmail/bin/vdelivermail '' bounce-no-mailbox
建立过滤规则文件.mailfilter
vi .mailfilter
内容请参考
但有点注意,此时内容最后不能加to "./Maildir/"(在单用户中是为了把不符合过滤规则的信件发到用户目录里,而现在不符合过滤规则的信件是要去执行.qmail-default的| /home/vpopmail/bin/vdelivermail '' bounce-no-mailbox这句话)
同样注意.mailfilter的属性
chmod 600 .mailfilter
chown vpopmail:vchkpw .mailfilter

这样通常情况下,就会对整个域做过滤了.但这里有个小问题.假如某个用户做了转发或者别名的话,域目录下会生成.qmail-user文件,这样该用户邮件到达时,就会去执行.qmail-user文件的内容,导致无法进行过滤.
所以需要注意的就是,在设置别名或转发的时候,要在生成的.qmail-user文件里也加上这一句
|/usr/local/bin/maildrop ./.mailfilter
保证邮件先进行过滤再分发到用户目录,这样就可以实现了.
 
阅读(3577) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~