procmailからコマンドへ処理を渡す
procmail自体でできる処理は限られているため、処理をスクリプトに渡したい。しかしメールをどのように受け取って処理するのかわからなかった。argv[0]とかではなく、標準入力(perlで言えばダイヤモンド演算子のような)で受け取るようだ。
.procmailrc にこのように書き、
:0: * ^To:.* | /home/my/bin/emailtest.py
emailtest.pyというファイルにこのように書く。
#!/usr/bin/env python # -*- coding: utf-8 -*- import sys input = sys.stdin.read() from email.header import header,make_header,decode_header import email def mailread(input): file = open ("/home/me/procmail_log", "a") file.write("---- begin -----\n") m = email.message_from_string(src) subject = decode_header(m["Subject"]) file.write("You got a mail!\n") for i, v in enumerate(subject): file.write(str(i) + " : " + v[i]) file.write("---------\n") file.close() mailread(input)
のようにすると、メールの件名がファイルにちゃんと書き出されているのが確認できる。