用于后缀的Python过滤器
我试图为postfix制作一个简单的Python过滤器,为某些消息添加一个“Reply to”头 到目前为止,我所做的是从stdin获取电子邮件,并将其解析为电子邮件对象,如下所示:用于后缀的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') 现在我想把它重新注入到后缀中。读取与后缀关联的文件时,我应该
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等)。