写了一个清理垃圾邮箱超过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]] 这个脚本只删除Maildir/.Junk/cur下超过$expired_days的邮件,但是貌似Maildir/.Junk/new下边也有垃圾邮件,看来还得改改。
重新写了下,把new下边的未读垃圾邮件也删了,因为调用多次,部分代码索性就放到函数里边了。
3月10日早上再改了一下,因为昨晚可能太晚有点糊涂,把1写成了l导致判断不出来,现在这个刚测试过是没问题的,如果有下载过的请更新,谢谢。
[[i] 本帖最后由 archerhu 于 2009-3-12 12:14 编辑 [/i]] 强烈顶1下。呵呵。不管如何,lz之心实在可嘉!!大家帮忙测试1下哦。 好贴路过也要顶一下 大家的参与,ExtMail项目才能成为最强,最优的开源项目:handshake 顶lz 根据自己的需要,刚才给程序加了写日志的功能,方便放入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]] 哈哈。强顶archer,造福社区:lol :hug: 自己有需要,就写出来用,顺道给大家共享一下而已。
向何老大学习!希望extmail添加更多实用的功能,嘻嘻。:handshake 用了几天,今天发现一个小问题,今天新建了一个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]] 我顶,强顶 不错,好东西,顶起来。 是好东西,收藏了 这个非常的经典! 将在新版软件里集成进去, 不过需要大量改进才行,这个脚本很多地方是固定死的;P 其实一条命令就可以解决了 /usr/bin/find /home/domains/. -mtime 30 | /bin/grep -E '\.(Trash|Junk)\/cur\/' | /usr/bin/xargs /bin/rm -rf
页:
[1]