SVX日記
2015-12-10(Thu) pinchmail、または私は如何にしてfetchmailを諦めてmaveから機能を切り出すことにしたか
・メールを送信できる端末はどこにでもあり、どこからでも要求を送信できる
・メールというインフラは、概ね信頼性が高く、障害でメールが消失しにくい
・任意のタイミングで(周期的に)要求を受信(POP)し、処理できる
・必要なら即座に応答を送信(SMTP)できる
・処理に失敗したら、メールを削除しなければ、再度要求を受信(POP)できる
ひとつのメールアカウントに到着した要求を、複数のサービスで処理することもできる。fetchmailとprocmailを使い、複数のメールアカウントに転送するのである。各々のサービスは、各々のメールアカウントに到着したメールをトリガとし、メールの内容を見て、自分が処理すべきメールであれば処理し、そうでなければ単に読み捨てればいい。
そんなの、メールアカウントAから、ホストBがメールを受信し、ホストB上のサービスC, D、および、ホストE上のサービスF, Gにメールを転送すればいいじゃん、procmailには、ホスト間のメール転送機能もあるでしょ? といわれればそのとおりなのだが、それはイマイチなのである。
そうなると、ホストBとホストEが、等しくメールアカウントAにアクセスする構成を採らざるを得ないのだが、ホストBがメールを受信して削除してしまうと、ホストEがメールを受信できなくなってしまう。その逆も起こりうる。片手落ちこの上ない。ならばと、メール受信後もメールを削除しなければ、双方でメールを受信させることが可能になるのだが、今度はメールボックスを溢れさせることになる。
これ、ニッチな機能のようであって、実はかなり有用な機能なのだ。というのも、複数の環境でメールを処理する場合、例えば、本宅と別宅で同じメール環境を持ちたい場合に「しばらく」の長さを、双方のPOP間隔より長めにすることにより、双方に同じ内容のメールボックスを維持できるようになるからである。
というか、それって拙作のメールクライアント「mave」で既に実現されている機能じゃねぇか……というワケで、POP機能の部分だけ切り出し、パイプでprocmailに渡すコードだけ追加してみた。その名も「pinchmail」。「fetchmail」の代わりとなる物件だから、敢えて名前も似せてみた。
パッケージを置いておく。