我希望让postfix将所有电子邮件发送到一个Python脚本中进行扫描。但是,我该如何将postfix的输出导入到Python中?Python中的标准输入是什么?你能给出一个代码示例吗?
与Michael建议的调用sys.stdin.readlines()
然后循环并将行传递给email.FeedParser.FeedParser().feed()
不同,你应该直接将文件对象传递给邮件解析器。
标准库提供了一个方便函数email.message_from_file(fp)
,用于此目的。因此你的代码变得更加简单:
import email
msg = email.message_from_file(sys.stdin)
# send to emailname@example.com
emailname: "|/path/to/script.py"
Python的email.FeedParser
模块可以通过以下方式从stdin构建一个表示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()
从这里开始,您需要迭代msg
的MIME部分,并相应地执行操作。请参考email.Message
对象文档了解所需方法。例如,email.Message.get("Header")
返回Header
的标题值。
emailname: "|python path/to/script.py"
。至少在Othello上我们是这样做的。 - swandog