我希望能够在python中发送电子邮件,以便我可以解析反弹。VERP似乎是解决这个问题的办法。但是,当我设置我的from地址(不是mimmultipart对象的"from"值)以包含VERP分隔符时,我没有收到反弹通知。
我可以只是形成我自己的VERP发送者(即发送到user@domain.com,我可以只是设置我的From:地址为收件人"mysender+user- domain.com .mydomain.com"),并期望它工作,或者我需要配置后缀正确解析失败的DSN ?我的问题是收到了失败通知,当我这样做时,没有得到消息传递给有效的收件人。
也许举个例子会有帮助。
当我从myuser@domain.com发送电子邮件时,我收到退款通知。
当我从myuser+verp_identifier@domain.com发送电子邮件时,我没有收到任何反弹通知。(虽然地址正确的电子邮件,例如:valid_user@gmail.com可以通过。)Perl的Mail模块有一个Verp子模块,python有这样的东西吗?
您应该使用"Return-Path"而不是FROM作为发送反弹消息的地址。使用Postfix在出站消息中指定返回路径不需要特殊配置。
Postfix处理变量入站消息的配置要求可以用地址中的+来处理,因为+和后面的所有内容通常会被忽略。因此,将Return-Path设置为joe+bounce@here.com应该与to地址joe+bounce@here.com一起发送到joe@here.com。消息的程序化处理可以通过向主机添加过滤器来完成。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脚本通过管道接收所有入站消息。如果To地址包含一个+,后面跟着一些跳出键值,您可以与一个不再有效的地址相关联,您可以在数据库中将该地址标记为非活动地址。
为了正确处理VERP,必须对Postfix进行特殊配置。列出允许使用VERP的客户端的smtpd_authorized_verp_clients
只配置发送部分。事实上,它列出了允许使用XVERP命令的客户端,该命令会自动将+dest
添加到信封发送者地址。
但在其默认配置中,Postfix do not将发送给sender+ext
的消息自动传递给sender
。为此,您必须在main.cf
中添加(或取消注释)recipient_delimiter = +
。在默认配置中,该行存在,但被注释掉。
所以,如果你可以形成自己的VERP发送地址,即有一个信封发送地址myuser+verpid@domain.com
,你没有更多的事情要做,只要你有recipient_delimiter = +
:目标SMTP服务器将发送反弹到该地址,你的后缀将正确地传递到myuser@domain.com。
我不知道任何python包会自动添加XVERB命令。因此,我想说的是,如果你想让它被自动使用,你应该遵循以下在后缀VERP方法中描述的方法:
您可以使用smtpd_command_filter特性将XVERP附加到来自旧软件的SMTP命令。需要Postfix 2.7或更高版本
/etc/postfix/main.cf:
smtpd_command_filter = pcre:/etc/postfix/append_verp.pcre
smtpd_authorized_verp_clients = $mynetworks
/etc/postfix/append_verp.pcre:
/^(MAIL FROM:<listname@example.com>.*)/ $1 XVERP