ExtMail服务器社区's Archiver

archerhu 发表于 2009-3-9 22:22

写了一个清理垃圾邮箱超过n天的邮件的脚本

在建议版那边附和了一位仁兄的帖子,想extmail有自动清理n天的垃圾邮件的功能,后来想想不太难就索性自己写了。
原理是读取数据库除了domain为extmail.org以外的用户的maildir,然后遍历文件,再用-M看是几天前的文件(貌似-M是文件创建的天数),如果超过$expired_date的话就删除。理论上放到cron用perl cleanup_junk.pk每天执行一次就可以了。

声明一下:
1.本人好多年没写代码,perl就更不用说了,完全是个门外汉写的东西,请有心理准备。另代码都是今晚边google边现学现用的,写得不好、不规范可以提出意见,但是别骂人。
2.只是自己做了个东西共享给有需要的同仁,觉得不好、垃圾就别用,也别骂人,呵呵。

[[i] 本帖最后由 archerhu 于 2009-4-14 11:14 编辑 [/i]]

archerhu 发表于 2009-3-9 22:29

这个脚本只删除Maildir/.Junk/cur下超过$expired_days的邮件,但是貌似Maildir/.Junk/new下边也有垃圾邮件,看来还得改改。
重新写了下,把new下边的未读垃圾邮件也删了,因为调用多次,部分代码索性就放到函数里边了。
3月10日早上再改了一下,因为昨晚可能太晚有点糊涂,把1写成了l导致判断不出来,现在这个刚测试过是没问题的,如果有下载过的请更新,谢谢。

[[i] 本帖最后由 archerhu 于 2009-3-12 12:14 编辑 [/i]]

hzqbbc 发表于 2009-3-10 00:05

强烈顶1下。呵呵。不管如何,lz之心实在可嘉!!大家帮忙测试1下哦。

tool 发表于 2009-3-10 03:01

好贴路过也要顶一下

libran 发表于 2009-3-10 06:53

大家的参与,ExtMail项目才能成为最强,最优的开源项目:handshake

wxd5981 发表于 2009-3-10 08:48

顶lz

archerhu 发表于 2009-3-10 09:55

根据自己的需要,刚才给程序加了写日志的功能,方便放入cron的时候能查阅历史记录。
里边参数自己调整
$expired_days = 4;        #删除超过多少天的垃圾邮件
$log_enable = 1;     #是否开启写日志功能
$log_detail = 1;        #是否记录删除垃圾邮件详情
$log_file = '/var/log/cleanupjunk.log';   #日志文件路径
$screen_output = 1;         #是否把执行结果显示到console

[[i] 本帖最后由 archerhu 于 2009-3-10 15:53 编辑 [/i]]

hzqbbc 发表于 2009-3-10 11:43

哈哈。强顶archer,造福社区:lol :hug:

archerhu 发表于 2009-3-10 12:48

自己有需要,就写出来用,顺道给大家共享一下而已。
向何老大学习!希望extmail添加更多实用的功能,嘻嘻。:handshake

archerhu 发表于 2009-3-11 15:02

用了几天,今天发现一个小问题,今天新建了一个test2用户

mail# perl ./cleanup_junk2.pl
----------------------Clean up junk start at: Wed Mar 11 15:00:05 2009 ------------------------------
Cannot open /home/domains/mydomain.com/test2/Maildir/.Junk/new/: No such file or directory at ./cleanup_junk2.pl line 38.

估计是用户只有收到垃圾邮件,postfix才会在Maildir下边建立.Junk和它的几个子目录。
今天再改了一下,清目录前先判断是否存在,就不会出现我之前碰到的错误了,呵呵。楼顶的脚本已经更新为最新版了。

[[i] 本帖最后由 archerhu 于 2009-3-12 12:15 编辑 [/i]]

liushaobo 发表于 2009-5-5 00:07

我顶,强顶

librago 发表于 2009-5-5 08:13

不错,好东西,顶起来。

mouse 发表于 2009-5-5 14:17

是好东西,收藏了

htdqy 发表于 2009-6-6 14:10

这个非常的经典!

hzqbbc 发表于 2009-6-6 14:33

将在新版软件里集成进去, 不过需要大量改进才行,这个脚本很多地方是固定死的;P

shunz 发表于 2010-3-11 16:14

其实一条命令就可以解决了

shunz 发表于 2010-3-11 16:14

/usr/bin/find /home/domains/. -mtime 30 | /bin/grep -E '\.(Trash|Junk)\/cur\/' | /usr/bin/xargs /bin/rm -rf

页: [1]

Powered by Discuz! Archiver 7.0.0  © 2001-2009 Comsenz Inc.