[英]Send VERP compliant email using python and postfix
我希望能够使用python发送电子邮件,以便我可以分析跳动。 VERP似乎是解决方案。 但是,当我将发件人地址(不是MIMEMultipart对象的“发件人”值)设置为包括VERP分隔符时,我没有收到退信通知。
我是否可以组建自己的VERP发件人(即发送至user@domain.com,我可以为该收件人设置“发件人:”地址“ 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处理变量入站消息的配置要求可以使用地址中的+来处理,因为通常会忽略+及其后面的所有内容。 因此,应将“返回路径”设置为joe+bounce@here.com,并使用收件人地址joe+bounce@here.com将其传递到joe@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脚本通过管道接收所有入站消息。 如果“收件人”地址在某个退回键值后包含+,则可以将其与不再有效的地址相关联,可以在数据库中将该地址标记为无效。
为了正确处理VERP,必须对Postfix进行特殊配置。 该smtpd_authorized_verp_clients
其中列出了允许客户使用恩只VERP配置发送部分。 实际上,它列出了允许使用XVERP命令的客户端,该命令会自动将+dest
添加到信封发件人地址中。
但是,在其默认配置中,Postfix 不会自动将发送到sender+ext
的消息传递给sender
。 为此,您必须在main.cf
添加(或取消注释) recipient_delimiter = +
。 在默认配置中,该行存在但已被注释掉。
因此,如果您可以形成自己的VERP发件人地址,即具有myuser+verpid@domain.com的信封发件人地址,则myuser+verpid@domain.com
您有myuser+verpid@domain.com
recipient_delimiter = +
,您就无事可做:目标SMTP服务器将向该地址发送退回邮件,并且您的Postfix会将其正确传送到myuser@domain.com。
我不知道会自动添加XVERB命令的任何python软件包。 因此,恕我直言,如果您希望自动使用它,则应遵循Postfix VERP Howto中所述的以下食谱:
您可以使用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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.