用于后缀的Python过滤器

用于后缀的Python过滤器,python,email,filter,postfix-mta,Python,Email,Filter,Postfix Mta,我试图为postfix制作一个简单的Python过滤器,为某些消息添加一个“Reply to”头 到目前为止,我所做的是从stdin获取电子邮件,并将其解析为电子邮件对象,如下所示: raw = sys.stdin.readlines() msg = email.message_from_string(''.join(raw)) 然后我玩过头球等等 msg.add_header('Reply-to', 'foo@bar.com') 现在我想把它重新注入到后缀中。读取与后缀关联的文件时,我应该

我试图为postfix制作一个简单的Python过滤器,为某些消息添加一个“Reply to”头

到目前为止,我所做的是从stdin获取电子邮件,并将其解析为电子邮件对象,如下所示:

raw = sys.stdin.readlines()
msg = email.message_from_string(''.join(raw))
然后我玩过头球等等

msg.add_header('Reply-to', 'foo@bar.com')
现在我想把它重新注入到后缀中。读取与后缀关联的文件时,我应该使用“sendmail”命令将其传回。但是,我不确定如何将电子邮件对象传递给sendmail,例如使用子流程的“call()”,或者是否应该使用smtplib的“smtplib.SMTP()”

“正确”的方法是什么


谢谢

您应该能够使用这两种方法,但是smtplib.SMTP()更灵活,并且使错误处理更容易

如果需要示例,请查看我的:

re_inject方法正是这样做的(FUSMTPClient是smtplib.SMTP的一个子类),因此基本上可以归结为:

client = smtplib.SMTP('127.0.0.1',<yourportnumber for the receiving postfix instance>)
client.sendmail(<envelope from>, <envelope to>, <yourmessageobject>.as_string())
client=smtplib.SMTP('127.0.0.1',)
client.sendmail(,.as_string())

如果重新注入端口25,则会导致循环(消息将再次发送到过滤器)。因此,您需要在不同的端口(如10026)上增加一个实例。示例:(以localhost:10026 inet n开头的块…)啊,感谢您的回复-我现在已经通读了fuglu,这很有意义。我可以重新注射到10026吗,即使我是从stdin服用的?Postfix文档似乎只在侦听服务(如Fuglu)的上下文中讨论10026重新注入?好吧,邮件如何进入过滤器(stdin/smtp/…)并不重要。10026上的附加postfix实例对原始消息一无所知,它只是看起来像一条新消息(它获得了一个新的队列id等)。