python - 使用 python 和 postfix 发送符合 VERP 标准的电子邮件

标签 python postfix-mta verp

我希望能够在 python 中发送电子邮件,以便我可以解析退回邮件。 VERP 似乎是解决这个问题的方法。但是,当我将发件人地址(不是 MIMEMultipart 对象的“发件人”值)设置为包括 VERP 定界符时,我没有收到退回通知。

我可以只形成我自己的 VERP 发件人(即发送到 user@domain.com,我可以只设置我的发件人:该收件人的地址“mysender+user-domain-com.mydomain.com”)并期待它工作,还是我需要配置 postfix 以某种方式正确解析失败的 DSN?我的问题是收到失败通知,执行此操作时没有将消息传递给有效的收件人。

也许一个例子会有所帮助。

当我从 myuser@domain.com 发送电子邮件时,我会正常收到退回通知。

当我从 myuser+verp_identifier@domain.com 发送电子邮件时,我没有收到任何退回通知。 (尽管地址正确的电子邮件,例如,发送至:valid_user@gmail.com 也能顺利通过。) Perl's Mail module有一个Verp子模块,python有这样的吗?

最佳答案

您应该使用“Return-Path”而不是 FROM 作为退回邮件的发送地址。使用 Postfix 在出站消息中指定返回路径不需要特殊配置。

Postfix 处理可变入站消息的配置要求可以用地址中的 + 来处理,因为 + 和后面的所有内容通常都会被忽略。因此,将 Return-Path 设置为 joe+bounce@here.com 应该传送到 joe@here.com,收件人地址为 joe+bounce@here.com。可以通过向 master.cf 文件添加过滤器来以编程方式处理消息。

将其放入服务列表:

smtp      inet  n       -       -       -       -       smtpd
  -o content_filter=filter:dummy

并在此处定义过滤器:

filter    unix  -       n       n       -      10       pipe
  flags=Rq user=filter null_sender=
  argv=/home/filter/InboundProcessor.py -f ${sender} -- ${recipient}

这将导致 InboundProcessor.py 脚本通过管道接收所有入站消息。如果收件人地址包含 + 后跟一些退回键值,您可以将其与不再有效的地址相关联,则可以在数据库中将该地址标记为无效。

关于python - 使用 python 和 postfix 发送符合 VERP 标准的电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23692885/

相关文章:

python - 如何将CoAP转换为HTTP?

email - 解释 VERP

linux - 您是否应该在Linux服务器上同时使用两个NIC?

java - VERP 与 JavaMail 和 Postfix,如何操作?

python - 使用 Python 的维基百科 API JSON

Python ftplib 最佳 block 大小?

python - 如何通过(字符串)名称选择变量?

postfix-mta - 使用 Postfix 删除 header 的 DKIM 签名电子邮件

linux - 如何在 Qmail 中允许标记的电子邮件地址?