使用python和postfix发送符合VERP的电子邮件
我希望能够用python发送电子邮件,以便分析反弹。VERP似乎是解决这个问题的方法。但是,当我将我的from地址(不是MIMEMultipart对象的“from”值)设置为包含VERP分隔符时,我不会收到跳出通知 我可以只填写我自己的VERP发件人(即发送到user@domain.com,我是否可以为该收件人“mysender+user domain com.mydomain.com”)设置我的From:地址并期望它正常工作,或者我是否需要配置postfix以正确解析失败的DSN?我的问题是收到失败通知,当我这样做时,没有将消息传递给有效的收件人 也许举个例子会有所帮助 当我从myuser@domain.com,我收到的反弹通知很好 当我从myuser+verp发送电子邮件时_identifier@domain.com,我没有收到任何反弹通知。(尽管电子邮件地址正确,例如收件人:valid)_user@gmail.com过得很好。)使用python和postfix发送符合VERP的电子邮件,python,postfix-mta,verp,Python,Postfix Mta,Verp,我希望能够用python发送电子邮件,以便分析反弹。VERP似乎是解决这个问题的方法。但是,当我将我的from地址(不是MIMEMultipart对象的“from”值)设置为包含VERP分隔符时,我不会收到跳出通知 我可以只填写我自己的VERP发件人(即发送到user@domain.com,我是否可以为该收件人“mysender+user domain com.mydomain.com”)设置我的From:地址并期望它正常工作,或者我是否需要配置postfix以正确解析失败的DSN?我的问题是收
有一个Verp子模块,python有这样的子模块吗?为了正确处理Verp,必须专门配置Postfix。
smtpd\u authorized\u verp\u客户端
列出了允许您使用verp的客户端,仅配置发送部分。事实上,它列出了允许使用XVERP命令的客户端,该命令会自动将+dest
添加到信封发送方地址
但在其默认配置中,Postfix donot会自动将发送到sender+ext
的消息传递给sender
。要使其工作,您必须在main.cf
中添加(或取消注释)recipient\u delimiter=+
。在默认配置中,该行存在,但已注释掉
因此,如果您可以形成自己的VERP发件人地址,即拥有一个信封发件人地址myuser+verpid@domain.com
,如果您有收件人_delimiter=+
:目标SMTP服务器将向该地址发送跳转,您的后缀将正确地发送到该地址myuser@domain.com.
我不知道任何python包会自动添加XVERB命令。因此,如果希望自动使用,应遵循中所述的以下配方:
您可以使用smtpd_command_filter功能将XVERP附加到旧软件的SMTP命令。这需要Postfix 2.7或更高版本
/etc/postfix/main.cf:
smtpd_命令_filter=pcre:/etc/postfix/append_verp.pcre
smtpd_授权_verp_客户端=$mynetworks
/etc/postfix/append_verp.pcre:
/^(邮寄地址:.*)/$1 XVERP
为了正确处理VERP,必须专门配置后缀。smtpd\u authorized\u verp\u客户端
列出了允许您使用verp的客户端,仅配置发送部分。事实上,它列出了允许使用XVERP命令的客户端,该命令会自动将+dest
添加到信封发送方地址
但在其默认配置中,Postfix donot会自动将发送到sender+ext
的消息传递给sender
。要使其工作,您必须在main.cf
中添加(或取消注释)recipient\u delimiter=+
。在默认配置中,该行存在,但已注释掉
因此,如果您可以形成自己的VERP发件人地址,即拥有一个信封发件人地址myuser+verpid@domain.com
,如果您有收件人_delimiter=+
:目标SMTP服务器将向该地址发送跳转,您的后缀将正确地发送到该地址myuser@domain.com.
我不知道任何python包会自动添加XVERB命令。因此,如果希望自动使用,应遵循中所述的以下配方:
您可以使用smtpd_command_filter功能将XVERP附加到旧软件的SMTP命令。这需要Postfix 2.7或更高版本
/etc/postfix/main.cf:
smtpd_命令_filter=pcre:/etc/postfix/append_verp.pcre
smtpd_授权_verp_客户端=$mynetworks
/etc/postfix/append_verp.pcre:
/^(邮寄地址:.*)/$1 XVERP
您应该使用“返回路径”而不是“发件人”作为跳转邮件的发送地址。使用后缀在出站消息中指定返回路径不需要特殊配置
Postfix处理变量入站消息的配置要求可以用地址中的+来处理,因为+和后面的所有内容通常被忽略。所以给乔设置返回路径+bounce@here.com应交付给joe@here.com带着对乔的称呼+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脚本通过管道接收所有入站消息。如果“收件人”地址包含一个+后跟某个跳转键值,您可以将该跳转键值与一个不再有效的地址相关联,您可以在数据库中将该地址标记为非活动地址。您应该使用“返回路径”而不是从作为跳转消息的发送地址。使用后缀在出站消息中指定返回路径不需要特殊配置
Postfix处理变量入站消息的配置要求可以用地址中的+来处理,因为+和后面的所有内容通常被忽略。所以给乔设置返回路径+bounce@here.com应交付给joe@here.com带着对乔的称呼+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脚本通过管道接收所有入站消息。如果“收件人”地址包含+后跟某个反弹键值,则可以