如何在postfix中收集反弹

这与这个问题有关:

Linux的 – 如何获得我的通讯应用程序反弹报告? – 服务器故障

比方说,当我发送新闻简报来识别popup消息并从我的通讯中取消订阅时,我正在生成这样的电子邮件地址:[email protected]

我假设我会在返回path中使用它,对吧?

那么我如何设置它在后缀收集所有这些地址前缀“反弹 – ”到一个邮箱?

最后,我听到人们提到软反弹与硬反弹。 有人可以解释不同的情况以及应该如何计算,以便知道何时从电子邮件通讯中永久删除某人?

您的问题的确切答案(处理[email protected]地址)取决于您的服务器configuration如何接收邮件。 如果example.com是虚拟域,则最好的做法是收集[email protected]邮箱中的邮件(假设recipient_delimiter = - )。

如果example.com是服务器的本地交付域(邮件交付给实际系统帐户),那么您可以将.forward文件添加到bounce用户的主目录,该用户将交付给parsing退回信息和logging的程序它在一个数据库或文件中。 有关.forward格式的更多信息以及如何提供给程序,请参阅man local

我们做什么,因为我们发送大量域的消息,使用bounces.example.com作为我们的VERP域。 这个域需要被添加到relay_domains 。 用这个内容创build/etc/postfix/transport_maps

 bounces.example.com bulkbounce: 

然后在/etc/postfix/master.cf添加一行类似的内容:

 bulkbounce unix  -  nn  -   - pipe道
   user = nobody argv = / usr / local / bin / bounce_handler.py $ {recipient}

bounce_handler.py脚本接受VERP地址作为它的命令行选项,parsing它并进行必要的数据库更新以logging反弹。

事实上,如果你想支持许多不同的领域,Instyle的答案是非常难以实现的,这是错误的,因为:

a)以transport_maps为例,发送到该域名的所有电子邮件将被发送到该特定服务,而不考虑该电子邮件是否被退回电子邮件。 由于它使用了一个特定的域名,它确实应该只是反弹的电子邮件…但它不能以这种方式得到保证。

b)发送到您的脚本的数据是电子邮件本身,而不是反弹消息。 换句话说,你的代码可能不知道为什么电子邮件被反弹(即本地反弹只会给你发送原始邮件)。


在postfix中设置的正确方法是使用反弹通知类。

1)在/etc/postfix/main.cf中

 notify_classes = bounce bounce_notice_recipient = [email protected] transport_maps = hash:/etc/postfix/transport_maps 

2)在/ etc / postfix / transport_maps中

 # when you make changes to this file, run: # sudo postmap /etc/postfix/transport_maps [email protected] bulkbounce: 

正如你所看到的,我们现在告诉postfix每当电子邮件被反弹时使用[email protected] 。 然后在交通地图中,使用bulkbounce作为服务来处理任何电子邮件地址到[email protected]

最后你可以用你的脚本定义bulkbounce

3)在/etc/postfix/master.cf中

 bulkbounce unix - nn - - pipe flags=FRq user=bounce argv=/home/bounce/bin/snapbounce --sender ${sender} --recipient ${recipient} 

这个脚本需要你有一个用户。 nobody是一个好的select。 如果你想拥有一个特定的用户,你可以创build它:

 useradd bounce 

如果没有master.cf的脚本,电子邮件将被发送到bulkbounce帐户。 所以,如果你有一个脚本来parsing文件中的邮件,那么这个工作不需要transport_mapsmaster.cf改变。

大多数现代邮件列表软件已经知道如何处理VERP消息,如果MTA被正确configuration,将它们传回给邮件列表软件。 在GNU Mailman的情况下,您应该签出名为“我如何使用VERP和 – delimiter(Postfix recipient_delimiter)?”的FAQ页面。

如果您正在制作自己的自定义通讯软件来处理这个问题,那么您应该问自己为什么要重新发明轮子,而不是使用现有的应用程序来轻松简便地处理这个任务。