Procmailなメール環境Fetchmailとはその名のとおりメールサーバーからメールをダウンロードするプログラムであり、Procmailは入力されたメールをユーザー指定のフィルタによって配分するプログラムです。これまでは個人でメールを受信するにしても面倒なローカルサーバーをたてたりしていましたが、FetchmailとProcmailを組合せることにより、ローカルサーバーをたてることなしにMaildir形式でメールを取り込むことができるようになりました。最小の設定は以下のようになります。fetchmailとすれば.maildirにメールを取り込むことができます。次にMewの設定をします。mewでMaildirにあるメールを閲覧することができます。"fetchmail"))を定義しておけばいいでしょう。shell-commandのあとにmewを呼び出すとbetterかもしれません。mewするのはナンセンスというか面倒くさいのです。理想はターミナルのどこかに新着メール数を表示してくれることです。alwayslastline(ターミナルの最終行にあらゆる情報を表示することができるステータス表示機能)を使っておりますので、ここに表示してしまうのが最も楽で見栄えもよいHackになるのです。いうことで新着メール数を求める方法について検討したいと思います。はじめに思い浮かぶのが、.maildir/newのファイル数をそのまま新着メール数にしてしまうという方法。メリットはサーバー上にメールをkeepしなくてもよい。デメリットは実際に(バックグラウンドで)メールを受信しなければならない(あまりデメリットになっていない)。-cの出力結果を解析して新着メール数を求める方法。メリットは実際にメールを受信するわけではないので計算時の負荷が小さい。デメリットはメールをサーバー上にkeepしなくてはならない(これは大きい)。現在のところ僕は後者の環境なのですので(近いうちに前者へ)、そちらを前提して説明します。-cで新着メール数を求める方法。-cの出力結果が解析しづらい(というわけではないのですが)のと統一の問題を考慮して、Perlで書いてしまうのがいいと思います。alwayslastlineに送ります。alwayslastlineを上書きしてしまうのが一番わかりやすいでしょう。具体的には以下のようになります。alwayslastlineにMail(0)と表示されますので、0の部分を先ほど求めた$unreadに置きかえてやればいいわけです。alwayslastlineを更新させるには、このスクリプトを起動します。./screenstatusさて、これで新着メール数をターミナルに表示することはできましたが、いちいちscreenstatusを起動するのは面倒すぎます。普通の人ならcrontabに登録して自動で新着メール数が更新される姿にうっとりしたいはずです。いうわけでcrontabに登録しましょう。/home/example/bin/screenstatusこれで10分ごとに新着メール数が更新されるはず!とワクワクしながら待てど一向に更新される気配がありません。found.となってしまっています。同一セッション内からでしか-rオプション(既存screenをresumeするオプション)を使えないようです。対策を探しては試してみましたが一つの方法を除いて全て失敗におわりました。唯一成功した方法では-Sオプション(PIDからscreenを指定するオプション)を使用するので無理矢理感が否めませんが、ほかに方法がないのでこの方法を使うようにscreenstatusスクリプトを修正します。Mail($unread)`;これで無事10分ごとに新着メール数が更新されるようになりました。いやはやかっこいいですね。ぶっちゃけていうと、-Xオプションがサポートされているscreenでは新着メール数に限らずなんでも表示できてしまいます。screen最強です(screenに関するエントリも書く予定)。acladdコマンドが呼ばれている必要があります。rootと逐次登録するのもありです。14:43cronを使わずに、無限ループの中で10分間スリープするスクリプトを動かすのも手かもしれません。readerは嫌いなので仲間内でfetchmailっぽいinterfaceを提供するfetchrssを作ってみました。libraryが使えないのでボツ)。tableによる既読管理(~/.fetchrss)でチェックし、未読ならばコンフィグファイル(~/.fetchrssrc)のmdaフィールドにメール形式で投げるようになっています。serverとして外部のメールアドレスに送信することも可能です。mewな環境で購読することを薦めます。いうよりそれを目的として作られているので。アクセスしてfetchrss-x.x.x.tar.gzをダウンロードします。fetchrssはただのPerlスクリプトですので簡単にインストールできます。LWPとXML::Feedを使いますので別途インストールしておいてください。installデフォルトでは/usr/local/binにインストールされます。場所を変えたい場合はMakefileをいじくってください。以上でインストールが完了しましたので、簡単なコンフィグファイルを書きましょう(sample-fetchrssrcが同封されています)。http://somewhere/RSSmdaは必須フィールドです。/usr/bin/procmailの他に/usr/bin/sendmailも指定できます。その場合はtoフィールドやfromフィールドも適切に変更しましょう。......encodingにはmimeのencoding名を書きます。日本語メールはISO-2022-JPがほとんどなのでデフォルトのままで問題ありません。includeはメール本文に含む情報を指定します。siteはサイト名、titleはエントリのタイトル、uriはエントリのURI、bodyはエントリの本文となっています。nohtmlを書いておくとhtmlをplainのままで埋め込みます。fetchmail同様、feed(fetchamilではpoll)ごとにも上記の設定を適用することができます。~/.fetchrssrcのようにしましょう。/usr/bin/local/fetchrssのようにすれば全feed取得できます。次はmewで読めるようにしましょう。いってもprocmailを使えばmaildirにそのまま入れてくれるので基本設定だけでも購読はできます。feedというのは日に日に増していくもので、それだけでmaildirがいっぱいいっぱいになってしまいます。mewの自動整理機能を使ってfeedを整理できるようにしておきましょう。x.x.xという情報をいれるので、これを利用して+net/feedというフォルダに自動整理させるようにしましょう。modeでM-oとすると整理対象を自動で検出してマークしてくれます。そのままxすれば自動整理完了です。読むまえから整理しちゃうとメールがあちこちに飛んでいっちゃって、おまけにUマークも消えるので注意しましょう。feedを読んでいるとhtmlメールが多いことに気づくと思います。htmlタグを高速に脳内で変換できる人を除いて、ほとんどの人はそれを不愉快に思うでしょう。rendererがあるのでこれを使います。parserが動きだし適切にフォーマットしてくれます。これはこれで大変便利なのですが、いちいち.するのは非常に面倒です(人間の欲求は無限です)。それを知人に愚痴ったところ以下のようなコードを教えてくれました(多謝!)。(mew-summary-analyze-again))))これでnやpしたときに自動的にparserが動きだし.せずともhtmlメールを華麗に読むことができます。readerさながらのUIを堪能することができます。nとpでどんどん読めますし、*でマークもできます。readerがやっているようなpin機能はマークで実現できます。おまけにmewにはフォルダという概念がありますので、たとえば+net/feed/importantとかいうフォルダを作っておいてpinなマークをそのままmoxすることができます。emacsですのでfeed内の文章をそのままキルヤンしたりもできます。以下のように設定することによって簡単に外部ブラウザでそのエントリを確認することができます。ちなみに僕の外部ブラウザはemacs-w3m(すでに外部じゃない)です。uriなfeedのメール本文にはエントリのURIが記述されますので、そこにポイントを合わせてC-xMしてください。使ってみた感じでは大きな問題もなく、思っていたより使いやすいインターフェースで購読できてかなり満足しています。何よりmdaでprocmailに渡すところにesrの思想を感じます。コンパイルできるといえばできるのですが、Ant特有のフォーマットが原因で正しくエラーメッセージをパースすることができないことがあります。antに-emacsオプションをつければ(標準の)emacsがパースできる形で表示してくれるらしいのですが、.antrcに自動判別コードを書けばもうすこしスマートにすることができるので紹介しときます。-Dbuild.compiler.emacs=true"fi(詳しくはhttp://www.jajakarta.org/ant/ant-1.6.1/docs/ja/faq.html#emacs-mode)ちなみに僕はマクロを使ってcompileの手間を省いています。compileを実行します。C-cをcompileに割りあてているらしいのですが、最近emacsのキーバインディングをいじるのが怖くなて、大体はマクロだとか関数だとかで解決しちゃっています。キーバインディングはできるだけデフォルトで一貫するのが一番かなと思っています。それなりに吟味されているわけですし。いう謎の文字が出てきたりしてソースの整備がちゃんとなされているのか微妙に不安になったりするのですが、先日この文字の謎を偶然解明しました。Emacsのページング機能に使われるようです。ページをめくる感覚ですばやくページ間移動ができるようになるのです。適度に挿入してセクション移動を楽にしておくといいかもしれません。正しくエスケープできないエディタで編集すると痛い目にあいそうなのでところかまわず使うのは問題がありそうです。