加入收藏 | 设为首页 | 会员中心 | 我要投稿 衡阳站长网 (https://www.0734zz.cn/)- 数据集成、设备管理、备份、数据加密、智能搜索!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2021-01-12 07:37:56 所属栏目:MsSql教程 来源:网络整理
导读:我们有一个后缀安装,其中包含几个虚拟域,每个虚拟域都有虚拟用户.使用 mysql数据库映射这些域和用户.到目前为止,我一直在通过解析后缀日志文件来跟踪反弹.我怀疑必须有更好,更有效的方法.我想到了三个,但我不确定什么是最好的: 编写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

至于脚本和数据库,我现在使用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

(编辑:衡阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读