将退回邮件记录到数据库(具有虚拟域/用户的Postfix)

前端之家收集整理的这篇文章主要介绍了将退回邮件记录到数据库(具有虚拟域/用户的Postfix)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们有一个后缀安装,其中包含几个虚拟域,每个虚拟域都有虚拟用户.使用 mysql数据库映射这些域和用户.到目前为止,我一直在通过解析后缀日志文件来跟踪反弹.我怀疑必须有更好,更有效的方法.我想到了三个,但我不确定什么是最好的:

>编写Postfix内容过滤器,记录退回并丢弃邮件
>使用procmail – 但我不确定procmail如何与没有定义$HOME的虚拟用户一起使用
>编写一个POP邮箱来自邮箱的脚本;解析并记录它们并删除退回的电子邮件

我希望从维护的角度来看哪个最好,从保存服务器资源的角度来看是有效的.谢谢

解决方法

这一切都假定您要收集有关跳出的信息而不是退回的电子邮件本身:

我有与postfix,MysqL和虚拟主机几乎相同的设置.从硬件资源角度来看,跟踪此问题的最有效方法是在执行时解析日志文件.但是如果你认为解析是如何解决的,那么你可以使用像Logwatch这样的应用程序为你做所有的解析.然后设置Postfix为您抛弃退回的文件.

现在,如果您确定要在某处收集这些电子邮件,可以在main.cf文件中使用这些设置:

bounce_notice_recipient = someone@nowhere.com
error_notice_recipient = someone@nowhere.com

如果您希望完全销毁电子邮件,可以添加虚拟用户并调整别名文件以将其发送到dev / null

someone: /dev/null

至于脚本和数据库,我现在使用PHPMysqL很多,所以如果我使用这些工具,我可以创建一些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

猜你在找的MsSQL相关文章