将退回邮件记录到数据库(具有虚拟域/用户的Postfix)
我们有一个后缀安装,个中包括几个假造域,每个假造域都有假造用户.行使 mysql数据库映射这些域和用户.到今朝为止,我一向在通过理会后缀日记文件来跟踪反弹.我猜疑必需有更好,更有用的要领.我想到了三个,但我不确定什么是最好的: >编写Postfix内容过滤器,记录退回并扬弃邮件 我但愿从维护的角度来看哪个最好,从生涯处事器资源的角度来看是有用的.感谢 办理要领这统统都假定您要网络有关跳出的信息而不是退回的电子邮件自己:我有与postfix,mysql和假造主机险些沟通的配置.从硬件资源角度来看,跟踪此题目的最有用要领是在执行时理会日记文件.可是假如你以为理会是怎样办理的,那么你可以行使像Logwatch这样的应用措施为你做全部的理会.然后配置Postfix为您丢弃退回的文件. 此刻,假如您确定要在某处网络这些电子邮件,可以在main.cf文件中行使这些配置: bounce_notice_recipient = someone@nowhere.com error_notice_recipient = someone@nowhere.com 假如您但愿完全烧毁电子邮件,可以添加假造用户并调解别名文件以将其发送到dev / null someone: /dev/null 至于剧本和数据库,我此刻行使PHP和MySQL许多,以是假如我行使这些器材,我可以建设一些PHP代码来读取日记文件,查找跳出,然后将它们放到数据库中.然后我会在mail.log被截断之前运行代码.究竟上,在我写完它之后,我会在这里宣布代码. 这里有一些代码,假如你想用php / mysql运行它(我敢必定它也许更大度): <?php #parse_logs.php # load local file into array $val = file("mail.log"); $pattern = '/status=bounced/'; foreach ($val as &$value) { if (preg_match($pattern,$value)) { $a = split('[<>]',$value); //if you prefer you can also use: preg_match_all('/<(.*)>/','$value',$matches); #can be helpful to print the following to the screen during tests # echo $a[1]; // Make a MySQL Connection mysql_connect("localhost","username","password") or die(mysql_error()); mysql_select_db("postfix_db") or die(mysql_error()); // Insert a row of information into the table "example" mysql_query("INSERT INTO emails (emailaddress) VALUES('$a[1]') ") or die(mysql_error()); #again,if you want to see while running manually from cli #echo "Data Inserted!"; } #again,if you want to see while running manually from cli #echo "n"; } ?> 然后,您可以在mail.log配置为接纳之前当即启动cron,可能在cron启动后破除日记. 好像必要耗费大量精神来跟踪退回电子邮件的电子邮件地点.您必要编写mysql查询然后才气会见此信息. 你也可以完全跳过mysql的对象,只需将功效转达给测试文件或电子邮件地点(也可以行使cron) php parse.php > results.txt 要么 php parse_logs.php | /usr/sbin/sendmail someemailaddress@nowhere.com (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |