Python:Postfix stdin

Luc*_*man 7 python stdin postfix-mta

我想让postfix将所有电子邮件发送到将扫描电子邮件的python脚本.

但是,如何将postfix的输出传递给python?

Python的stdin是什么?

你能给出一个代码示例吗?

lfa*_*one 10

您应该将文件对象直接传递给电子邮件解析器,而不是按照Michael的建议调用sys.stdin.readlines()然后循环并传递行email.FeedParser.FeedParser().feed().

email.message_from_file(fp)为此目的,标准库提供了连通功能.因此,您的代码变得更加简单:

import email
msg = email.message_from_file(sys.stdin)
Run Code Online (Sandbox Code Playgroud)


Mic*_*ski 6

要将邮件从postfix推送到python脚本,请将这样的行添加到postfix别名文件中:

# send to emailname@example.com
emailname: "|/path/to/script.py"
Run Code Online (Sandbox Code Playgroud)

巨蟒email.FeedParser模块可以构造一个代表从标准输入一个MIME电子邮件消息的对象,通过做这样的事情:

# Read from STDIN into array of lines.
email_input = sys.stdin.readlines()

# email.FeedParser.feed() expects to receive lines one at a time
# msg holds the complete email Message object
parser = email.FeedParser.FeedParser()
msg = None
for msg_line in email_input:
   parser.feed(msg_line)
msg = parser.close()
Run Code Online (Sandbox Code Playgroud)

从这里开始,您需要迭代MIME部分msg并相应地对其进行操作.有关email.Message您需要的方法,请参阅有关对象的文档.例如,email.Message.get("Header")返回标头值Header.

  • 此外,您可能需要像这样调用python解释器:`emailname:"| python path/to/script.py"`.至少那是我们在othello上必须做的事情. (2认同)