Sylpheed の mimetmp 位置を変える

[戻る]

はじめに

この時以来, Windows でのメーラは Sylpheedを愛用しています. かなり満足しているのですが, 幾つか, こうすればいいのにと思っている点が あります.

  1. 外部プログラムから特定のメールにフォーカスが当たるようにしてほしい
  2. 保存しているファイルに暗号化をかけられるようにしてほしい
  3. 添付ファイルを開く時にできる一時ファイルを指定できるようにしてほしい

詳細は避けますが 1. は検索やスケジューラと連携させたいため, 2 はメールログ一式を USB メモリに入れたいためです. また 3 は, 2. の USB メモリはもちろん, 現在私が使用している形態: ネットワークコンピュータ上にメールログを置いて, その時々に利用する PC から同じログを操作するときにあると便利だからです. この形態は configdir オプションで指定するディレクトリを ネットワークコンピュータ (もしくは USB メモリ) にするわけですが, 添付ファイルは必ずそのディレクトリ下の mimetmp 以下に開かれます. ところがここはネットワークコンピュータ上のファイルシステムですから 時間がかかります.

この 3. は正直切実なので前々からなんとかしてみたいと思ってました. ソースはここにあるので, 修正自体は簡単そうです. 話が Linux ならばという前提だとですが… 問題は Windows 版を作りたいとということです. 開発環境を整えなければなりません. そのため, 長いことほっといていたんですが, 先日とうとう開発環境を整え 手をつけてみることにしました.

ソースとバイナリ

ソース (3.0.2) に対するパッチはここ です. 先述したように開発環境を整えるのは大変なのでバイナリも ここ においておきます. 正規の Windows 版バイナリ (sylpheed-3.0.2-win32.zip) を入手・展開し, 上書きしてください.

ただし, 実は開発環境を整えるのは私も手間でしたので, コンパイルオプションは必要最小限にしてあります. 例えば ssl はありません.

使い方と改変の中身

起動時の引数に --mimetmpdir というが追加されています. 使い方は configdir とほぼ同じです.

(例) sylpheed.exe --configdir Z:\Sylpheed --mimetmpdir C:\tmp
上記例では, メールログはネットワークドライブ (Z:) にありますが, 添付ファイルは HDD (C:) に展開されます. 展開先を ramdisk にするとさらに快適です.

なお, mimetmpdir の指定先 (ここでは C:\tmp) はあらかじめ作っておいてください. また面倒だったので sylpheed.ini には対応していません. 引数でがんばってください.

改変内容を要約すると, 添付ファイルの展開先を得る関数 (utils.c の get_mime_tmp_dir()) を改造し, もし --mimetmpdir で指定された文字列があるのなら, それを返すようにしただけです (なければ従来通りの動きにする). ところがソースを眺めると, ここ以外にも mimetmp を使っている箇所が幾つかあります (procmime.c の procmime_get_part_file_name() とか). とりあえず一見動いているようだし面倒なのでほっといています. しかし, もしかしたら何か不整合が起きる要因かもしれません.

また, 開発環境を整えるのが面倒なので ssl を無効 (--disable-ssl) にしたら コンパイルが通らなくなりました. とりあえずコンパイルが通るようにダミー関数を幾つか加えています (#ifdef USE_SSL の #else 以降として書きました).

おわりに

Sylpheed には不満点が 3 つあると言いましたが, そのうちの一つが解消されました. 今回せっかく開発環境を整えコンパイルできるようになったので, 機会があれば他の不満点も解消したいなと思います.

なお, HDD 等に展開された添付ファイルは Sylpheed 終了後消去されますが, 世の中その気になれば簡単に復元できます. あまり得体の知れない PC では本機能は使わない方が吉かと思います.


2010.4