我想让postfix发送所有邮件到一个python脚本来扫描邮件。Python:Postfix stdin
但是,如何将输出从postfix输出到python?
什么是Python的标准输入?
你能给一个代码示例吗?
我想让postfix发送所有邮件到一个python脚本来扫描邮件。Python:Postfix stdin
但是,如何将输出从postfix输出到python?
什么是Python的标准输入?
你能给一个代码示例吗?
从后缀推送邮件到Python脚本,加上这样一行到你的postfix别名文件:
# send to [email protected]
emailname: "|/path/to/script.py"
的python email.FeedParser
module可以构造一个对象,表示从标准输入一个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部分,并相应地采取行动。有关您需要的方法,请参阅the documentation on email.Message
objects。例如email.Message.get("Header")
返回标头值Header
。
而不是调用sys.stdin.readlines()
,然后按照Michael的建议循环并传递行到email.FeedParser.FeedParser().feed()
,您应该将文件对象直接传递给电子邮件解析器。
为此目的,标准库提供对话功能email.message_from_file(fp)
。因此,你的代码变得更简单:
import email
msg = email.message_from_file(sys.stdin)
现在的问题是,我希望这发生在每一封电子邮件中,而不仅仅是存在的emaildomains。是否有所有域的wlddcard? –
@LucasKauffman这是一个后缀配置问题。可能最好在serverfault.com上询问,因为我没有答案。 –
此外,您可能需要像这样调用python解释器:'emailname:“| python path/to/script.py”'。至少这就是我们在othello所要做的。 – swandog