Python: Postfix stdin - PullRequest
       14

Python: Postfix stdin

7 голосов
/ 29 ноября 2011

Я хочу, чтобы postfix отправлял все письма на скрипт на python, который будет сканировать письма.

Однако, как мне передать вывод из postfix в python?

Что такое стандарт для Python?

Можете ли вы привести пример кода?

Ответы [ 2 ]

10 голосов
/ 17 декабря 2013

Вместо вызова sys.stdin.readlines(), затем зацикливания и передачи строк в email.FeedParser.FeedParser().feed(), как это было предложено Майклом, вам следует вместо этого передать объект файла непосредственно анализатору электронной почты.

Стандартная библиотека предоставляет функцию удобства, email.message_from_file(fp), для этой цели.Таким образом, ваш код становится намного проще:

import email
msg = email.message_from_file(sys.stdin)
6 голосов
/ 29 ноября 2011

Чтобы отправить почту из postfix в скрипт на python, добавьте в файл псевдонима postfix следующую строку:

# send to emailname@example.com
emailname: "|/path/to/script.py"

Модуль python email.FeedParser может создать объект, представляющийсообщение электронной почты MIME от stdin, сделав что-то вроде этого:

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

Отсюда вам нужно перебрать части MIME msg и действовать в соответствии с ними.Обратитесь к документации по email.Message объектам , чтобы узнать, какие методы вам понадобятся.Например, email.Message.get("Header") возвращает значение заголовка Header.

...