如何在 Postfix 中收集退回邮件

如何在 Postfix 中收集退回邮件

这与这个问题相关:

linux – 如何获取我的新闻通讯应用程序的退回报告? - 代码日志

假设我在发送新闻稿以识别退回邮件并取消订阅新闻稿时生成了如下电子邮件地址:[电子邮件保护]

我认为我会在返回路径中使用它,对吗?

那么我该如何在 postfix 中设置将所有以“bounce-”为前缀的地址收集到一个邮箱中?

最后,我听到有人提到软退回和硬退回。有人能解释一下它们的区别吗?如何计算它们,才能知道何时永久将某人从电子邮件通讯中删除?

答案1

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

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

由于我们要向大量域发送消息,因此我们的做法是将其用作bounces.example.com我们的 VERP 域。此域需要添加到relay_domains/etc/postfix/transport_maps使用以下内容创建:

bounces.example.com             bulkbounce:

然后将类似于下面的一行附加到/etc/postfix/master.cf

bulkbounce unix-nn--管道
  用户 = 无人 argv = /usr/local/bin/bounce_handler.py ${recipient}

bounce_handler.py脚本接受 VERP 地址作为其命令行选项,对其进行解析并进行必要的数据库更新以记录退回。

答案2

实际上,如果您想支持许多不同的域,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 -       n       n       -       -       pipe
  flags=FRq user=bounce argv=/home/bounce/bin/snapbounce --sender ${sender} --recipient ${recipient}

此脚本要求您有一个用户。nobody也是一个不错的选择。如果您想要一个特定的用户,您可以使用以下命令创建它:

useradd bounce

如果没有 中的脚本master.cf,电子邮件将被发送到批量退回帐户。因此,如果您有一个从文件解析电子邮件的脚本,则无需 和transport_maps更改即可运行master.cf


来自以下评论:

仅供参考——关于:双重反弹...
如果您正在修改返回地址(VERP 地址,例如[email protected],那么您将需要注释掉中的行main.cfbounce_notice_recipient如果您+id只对在脚本中解析反弹感兴趣。

答案3

大多数现代邮件列表软件已经知道如何处理 VERP 消息,只要 MTA 正确配置,就可以将消息传回邮件列表软件。GNU 邮件管理器你应该看看常问问题页面恰当地命名为“如何使用带有 - 分隔符(Postfix 收件人分隔符)的 VERP?”。

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

相关内容