Sylpheed と gnus で既読情報を共有

[戻る]

はじめに

1990 年代前半の昔話から始めますが, 当時私は nemacs の RMail を使ってメールを読み書きしていました. っが, メールが溜まっていくとどうも使い勝手が悪くなります. 一方, 当時ネットニュースなるものがあって, 同じく nemacs 上の gnus を 使って良く読み書きしていたのですが, グループ毎に分類され非常に優れたインターフェイスを持ってました. 当然メールも gnus で読み書きしたいという欲求が生まれます. そこで, メールアドレスと分類するグループの定義ファイルを作り, それを参照しながらメールスプールからメールをかっぱらい, 各グループに 配布するというスクリプトを書いて gnus 上でメールを読んでいました.

ところがこれには問題があって, 同じメールアドレスでも内容によってグループを変えたい時や 定義ファイルに無いアドレスから来たメールを適当なグループに放る時, 手動で, メールファイルを移動させ, .newsrc を弄らないといけません. もっとインタラクティブに移動させたいなと考えていました.

とは言え慣れていたもんで, 自宅で Linux-PC を使ってプライベートな アドレスになってもしばらく愛用していたのですが, ある時 HDD のクラッシュか 何かのため, slackware+JE だったかか plamo だったかを入れ替えた時, mule か emacs か xemacs か忘れましたがとにかくバージョンが上がって 動かなくなってしまいました.

一瞬, がんばって動くようにしようかとも思ったのですが, 不満もあったことですし, この際もっと標準的なメーラを使おうと考えました. そこで Wanderlust とか mew とかトライしてみたのですが, どうもしっくり来ません.

まぁ gnus に慣れてしまいすぎたというのもありますが, もう一つの理由として, 職場ではAL-Mailを ボリュームライセンスで購入し利用していたというのもあります. AL-Mail はドラッグアンドドロップで簡単にメールの移動ができます. シンプルだし結構気に入ってました.

とはいえ AL-Mail も完全ではありません. ライセンスの関係で自宅で自由に使えないというのもありますが (「買えよ」というのはナシね), 仕事柄, あちこちの事務所からメールを読み書きするのですが, 既読情報の統一とセキュリティの観点から samba サーバ (ネットワークコンピュータ) 上のディレクトリにメールフォルダを置いて どこからもアクセスできるようにしていました. ところが

などという問題があります. まぁ一般的には WEB メールというのが解なんでしょうが...

そんな折, sylpheed というソフト をいじってみました. なかなか良さそうです. データ保存形式を見るとなつかしの gnus と親和性が高そうです. sylpheed を使って以下のようなことが出来ないかなと考えました.

  1. 普段は windows 上で sylpheed を使う.
  2. メールデータは samba マシンに保存する.
  3. 必要に応じ telnet で samba マシンにログインし gnus でメールを読む.
  4. メールの整理は sylpheed 上で行い, gnus ではタッチしない.
問題は既読情報の共有ですが, gnus 起動時に sylpheed のデータを元に .newsrc を作り, 終了時点で .newsrc から sylpheed のデータに戻せばいいわけです.

環境構築

以下私ががんばった手順を書いて行きますが, 「動けばいいや」で作ったので, これでいいのかとか余分な工程とかがある かもしれません. また各ソフトのバージョンが変わると動かないかもしれません. まぁその辺は勘弁してください. なお, samba サーバ上の emacs は 20.7で ディストリビューションは Plamo の 2.4.31 です.

  1. Windows マシンから samba マシンの自分のホームディレクトリが見れるよう 設定します (仮に w:\ に見えるとします)
  2. Slypheed ソース (sylpheed-2.3.1.tar.gz) を入手し, samba マシンの適当なディレクトリで展開します.
  3. 2. で展開したディレクトリに移動し make config, make を実行します.
  4. さらに src/sylpheed を実行します. いろいろ文句を言われるけど気にしなくていいです.
  5. これ を入手し 2. のディレクトリ (sylpheed-2.3.1) の下で展開します.
  6. cd gnus を実行した後 make します.
  7. agnus, bgnus というファイルが出来るので, 適当なディレクトリ (例えば ~/Bin ) の下にコピーします.
  8. Windows 用 sylpheed (2.3.0beta6) を入手し windows マシンの適当なディレクトリで展開します.
  9. 8. の sylpheed を --confdir で 4 で出来た ~/.sylpheed-2.0 を指定して 起動します (例えば --confdir "w:/.sylpheed-2.0" てな感じかな). 初回起動時はいろいろ文句言われるかもしれないけど気にしなくていいです.
  10. 適当に sylpheed を設定しメールの読み書きが出来るようにします. そうそう POP/APOP でサーバにメールは残さない処理以外の時も正しく動くかは 分かりません. また, グループ名に日本語を使うと正しく動くか分かりません. 英語にしてください.
  11. samba マシンにおいて, 4. で ~/Mail, 10. で ~/.sylpheed-2.0/Mailboxes/Mail が出来るので, 前者を削除に後者へのシンボリックリンクにします.
  12. .emacs の最後に以下のようなフレーズを加えます
    (load "tm-setup")
    
    (setq gnus-startup-file "~/.newsrc-mail")
    (setq gnus-select-method '(nnmh ":Mail"))
    (setq nnmh-directory "~/Mail")
    (setq nnmh-get-new-mail nil)
    
    (add-hook
       'gnus-before-startup-hook
       (lambda ()
    	 (call-process "~/Bin/bgnus")
    	 ))
    
    (add-hook
     'gnus-after-exiting-gnus-hook
       (lambda ()
    	 (call-process "~/Bin/agnus");
    	 ))
    
    (eval-after-load "gnus-mule" 
      '(gnus-mule-add-group "" 'iso-2022-7bit))
    
    
  13. (load "tm-setup") でエラーが出る時は tm-8.8.tar.gz を入手し, make, make install を実行します.

    tm-setup は mime エンコードされたサブジェクトを表示するためのものですが, 私の環境では, これをロードと X から立ち上げた emacs に限りモードラインの Gnus と書かれた部分が豆腐になってしまいました. -nw を付けて emacs を起動したり, gnus 起動前に (setq window-system nil) とか すると豆腐になりません. おそらく何かフォントが入ってないのだと思います. まぁ telnet で使うのが目的なので表面化しないはずですが, どうも気になります. かといってフォントを入れるのも嫌なので結局 tm-setup.el の

    ; for image/* and X-Face
    (defvar mime-setup-enable-inline-image
      (and window-system
           (or running-xemacs
              (and (featurep 'mule)(module-installed-p 'bitmap))
              ))
      "*If it is non-nil, tm-setup sets up to use tm-image.")
    
    (if mime-setup-enable-inline-image
        (call-after-loaded 'tm-view
                          (function
                           (lambda ()
                             (require 'tm-image)
                             )))
      )
    
    と書かれた部分をコメントアウトしました.

  14. 後は emacs を立ち上げ M-x gnus とすれば OK です.

gnus 上からのポスト処理は書いていません. sendmail を impost など適当なプログラムに上書きするとかしてください. 実は私はこの部分は適当な自作プログラムを使っています (気が向いたら公開します) が, ポスト処理も sylpheed のライブラリ (libsylph) を使う方が 筋が良さそうな気がします. っと言いつつ正直なかなか難解なのでほっといてますが.

プログラムについて

要は gnus 起動前に bgnus, 終了後に agnus を起動しています. 前者は libsylph を用いて, メールサーバからメールを受信すると同時に sylpeed 上の未読/既読管理情報を調べ, gnus の管理情報である ~/.newsrc-mail に書き出しています. 後者は gnus が更新した ~/.newsrc-mail を, sylpheed の未読/既読情報 ファイル (.sylpheed_cache, .sylpheed_mark) に吐き出しています. こういう仕様ですから, gnus と sylpheed を同時に起動することは考えていません. はい

.sylpheed_mark は必ずしも番号の若い順に書かれてないことが発覚したため, 結構効率の悪い処理をしています. また, Windows 上の sylpheed でグループを追加すると ディレクトリのパスの区切りが / じゃなくて \ になっています. まぁ folderlist.xml を毎回書き換えれば済むんですが, 使い勝手が悪いので 内部で \ は / に変更しています. なお, 上記 3. で作った Linux 用 sylpheed ではそういうことをしてないので 表示がグチャグチャになると予想されます. Linux 上ではたとえ X-Window でも sylpheed を使わず本 gnus を使ってメールを読み書きしてください (これは明らかにバグだと思うんで, そのうち sylpheed の方で修正されると思います).

AL-Mail からの移行について

  1. AL-Mail でフォルダ内のメールをすべて選択し, ファイルに保存で mbox ファイルを作る
  2. slypheed で「ファイル」の mbox をインポートを選び 1 のファイルを選んで 取り込む
  3. Linux 上で 2 のディレクトリに移動し以下のようなスクリプトを実行する
    #!/bin/tcsh
    #
    foreach f (*)
      nkf -d -j $f > $f.jis
      \mv $f.jis $f
    end
    
  4. AL-Mail すべてのフォルダが終わるまで繰り返す
要は sjis で保存されてないと, gnus から読めません. もしかしたら 2 のファイルを直接 nkf かけてもいいかも.

LANDISK での実行について

自宅では常時起動させている Linux マシンは Landisk (HDL-160U) です. もう時代遅れの感があるマシンで需要があるとは思いませんが, 念のため実行バイナリを ここ に置いておきます. バイナリの作り方 (コンパイルの仕方) とかインストールとかは, 書くのがめんどうなので省略します. emacs, namazu, ghostscript, pptpdt, TeX 等のインストール記を参照ください.

やり方は

  1. Windows マシンにおいて
    Sylpheed.exe --configdir "V:/.sylpheed-2.0"
    
    と実行する (V: は Landisk のネットワークドライブ名).
  2. Sylpheed 上でアカウント設定を行う.
  3. Landisk にログインし
    $ cd ~
    $ ln -s .sylpheed-2.0/Mailboxes/Mail Mail
    
    を実行
  4. readme を読んで, bgnus, agnus が動くよう調整
  5. .emacs を適当に書き換えておしまい


2007.2