私はpostfixに電子メールをスキャンするpythonスクリプトにすべての電子メールを送るようにします。Python:Postfix stdin
しかし、どのようにしてpostfixの出力をpythonにパイプするのですか?
Pythonの標準入力とは何ですか?
コード例はありますか?
私はpostfixに電子メールをスキャンするpythonスクリプトにすべての電子メールを送るようにします。Python:Postfix stdin
しかし、どのようにしてpostfixの出力をpythonにパイプするのですか?
Pythonの標準入力とは何ですか?
コード例はありますか?
あなたのPostfixのエイリアスファイルに次のような行を追加し、接尾からPythonスクリプトにメールをプッシュする:
# 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()
を呼び出して、マイケルの示唆通りにループしてemail.FeedParser.FeedParser().feed()
に渡すのではなく、ファイルオブジェクトを電子メールパーサーに直接渡す必要があります。
標準ライブラリは、この目的のために便宜関数email.message_from_file(fp)
を提供します。したがって、あなたのコードははるかにシンプルになります:
import email
msg = email.message_from_file(sys.stdin)
問題は今、私はすべての電子メール、存在する電子メールのドメインだけでなく、発生します。すべてのドメインにwirldcardがありますか? –
@LucasKauffmanこれは後置構成の質問です。私は答えがないので、おそらくserverfault.comで尋ねるのが最適です。 –
また、Pythonインタプリタを 'emailname:" | python path/to/script.py "'のように呼び出す必要があるかもしれません。少なくとも、それは私たちがオシロでやるべきことでした。 – swandog