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)

のようにすると、メールの件名がファイルにちゃんと書き出されているのが確認できる。