FIELD NOTES: 書を持って街へ出よう

合同会社フィールドワークス プログラマ兼代表のブログ

メール自動返信システムの調査

メール自動返信システムを作る方法を調査した。
やりたいことは,以下のとおり。

  • gmailから定期的にメールを取得する。
  • メールのパターンに応じて,返信用文書を組み立てる。
  • 返信メールを送信する。

また,返信用文書を組み立てる処理がある程度複雑になる予定なので,この部分はPythonなどのスクリプト言語で記述したい。できれば外部プログラムとして呼び出すのではなくて,シームレスにツールと結合していることが望ましい。

まず,メールを取得するプログラムとして以下を見つけた。

次に,メールのパターンに応じて処理を行うプログラム(メールフィルタ?)を探したところ,以下が見つかった。

この種のことをやる場合の定番はfetchmail+procmailと思われるが,procmailの設定ファイルは保守性が悪そうである。定番にこだわらずに検討してみた。

メール取得に関しては,getmailがPythonで記述してあり趣味にも合う。また,設定ファイルの書式もINIファイル形式に近く分かりやすい。ただ,設定ファイルは一度書いてしまえば,変更の頻度は低そうである。迷ったが,この部分で凝る必要はないので,結局fetchmailを使うことにした。

メールフィルタ・プログラムに付いては,Pythonベースのものを探したが見つからなかった。scmailはscheme(Gauche)で記述してあり,フィルタの設定やメールの内容を処理する関数もschemeで記述することができる。Pythonでないことを除けば理想に近いので,scmailを使うことにした。

fetchmailの設定ファイル.fetchmailrcは,最終的に次のようになった。

defaults
    protocol pop3
    no rewrite
    no mimedecode
    mda "/usr/local/bin/scmail-deliver"
    keep

poll pop.gmail.com
    username <ユーザ名>
    password <パスワード>
    ssl sslfingerprint  "<フィンガープリント>"

最後のsslfingerprint ... は手っ取り早く警告メッセージがでないようにするおまじないで,実際には“fetchmail -v”を実行して表示されるfingerprintの値をコピーする。この記事を参考にさせていただいた。

fetchmailによりダウンロードされたメールのメッセージは,mdaの指示にしたがってscmailに渡される。

scmailに渡されれば,後はschemeの世界なので,如何様にも加工できそうである。