【问题标题】:Python filter for postfix用于后缀的 Python 过滤器
【发布时间】:2011-11-01 11:26:44
【问题描述】:

我正在尝试为 postfix 制作一个简单的 Python 过滤器,以在某些消息中添加“回复”标题。

到目前为止,我所做的是从标准输入中获取电子邮件,并将其解析为一个电子邮件对象,如下所示:

raw = sys.stdin.readlines()
msg = email.message_from_string(''.join(raw))

然后我玩了标题等。

msg.add_header('Reply-to', 'foo@bar.com')

现在想将它重新注入到 postfix 中。阅读与后缀关联的filter readme,我应该使用“sendmail”命令将其传回。但是,我不确定如何将电子邮件对象传递给 sendmail,例如使用子进程的“call()”还是应该使用 smtplib 的“smtplib.SMTP()”?

什么是“正确”的方法?

谢谢

【问题讨论】:

    标签: python email filter postfix-mta


    【解决方案1】:

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

    如果您需要示例,请查看我的framework for python filtershttps://github.com/gryphius/fuglu/blob/master/fuglu/src/fuglu/connectors/smtpconnector.py#L67

    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())
    

    【讨论】:

    • 如果您重新注入到端口 25,您会导致循环(消息将再次发送到您的过滤器)。因此,您需要在 10026 等不同端口上再添加一个实例。例如:sourceforge.net/apps/trac/fuglu/wiki/FugluInstall(以 localhost:10026 inet n ... 开头的块)
    • 啊,谢谢您的回复-我现在已经阅读了fuglu,这是有道理的。即使我从标准输入中获取,我可以重新注入到 10026 吗? Postfix 文档似乎只在监听服务(如 Fuglu)的上下文中谈论 10026 重新注入?
    • AFAIK 消息如何进入您的过滤器(stdin/smtp/....)并不重要。 10026 上的附加后缀实例对原始消息一无所知,它只是看起来像是一条新消息(它得到一个新的 queue-id 等)。
    猜你喜欢
    • 2021-06-23
    • 2018-05-19
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 2018-05-30
    相关资源
    最近更新 更多