車輪、あるいは電子メールクライアント

ダウンロード: shaling-dist-20070313.tar.gz (70KBytes, 要 Python2.4以上) 更新履歴

デモ: その1 (メールを検索する)その2 (メールを書く)

Shaling (車輪) は UNIX と Python ユーザのための電子メールクライアントです。

特徴:

警告: このプログラムは現時点ではまだ開発段階のものであり、エラー処理やテストが完璧ではありません。 そのため、何かあったときに自力で解決できる人以外は使用をお控えください。 また、機能や仕様は将来変更されることがあります。

ご意見・ご質問はこちらへ: http://groups.google.com/group/shaling-users/


移行の手順

  1. インストールする。
  2. 設定ファイル .shalingrc を書く。
  3. データベースを作成する。
  4. 振り分け規則ファイルを書く。(オプション)
  5. 既存のメールを取り込む。
  6. 使う。
    1. メールを検索する
    2. メールを書く
    3. 新着メールを取り込む
    4. メールにラベルをつける
    5. 添付ファイルの操作
    6. 検索データベースの整理

1. インストール

ここでは、ユーザが個人のディレクトリにインストールする場合を想定しています。 (Shaling は単なる Python スクリプトなので、実行ファイルのパスさえ通っていれば どこにインストールしてもかまいません)

まずダウンロードした tar ファイルを適当な場所に展開します。

$ tar zxf shaling-dist-20070228.tar.gz
$ cd shaling-dist-20070228
$ ls -l
-rw-r--r--    1 yusuke        463 Jan  2 11:27 Makefile
-rw-r--r--    1 yusuke        248 Jan  6 15:51 README
drwxr-xr-x    2 yusuke       4096 Jan 14 01:31 bin        (実行可能ファイル)
drwxr-xr-x    2 yusuke       4096 Jan 14 01:21 docs       (文書ファイル)
drwxr-xr-x    2 yusuke       4096 Jan 14 01:33 etc        (設定ファイルのサンプルなど)
drwxr-xr-x    3 yusuke       4096 Jan 14 01:35 shaling    (Shaling本体)

次に、このディレクトリ内にある bin ディレクトリにパスを通します。

$ PATH=$PWD/bin:$PATH

その後、shaling とタイプすると、 「設定ファイルがない」という以下のようなエラーが表示されます。

$ shaling
[Errno 2] No such file or directory: '/home/yusuke/.shalingrc'
shalinrc not found!

もし、ここで

Unknown option: -E
または
SyntaxError: invalid syntax
といわれる場合は、古いバージョンの Python が実行されている可能性があります。 Python 2.4 以上をインストールし、それが python というコマンドで 実行されるようにしてください。

python コマンドがデフォルトで Python 2.4 以外のものを実行する場合は、環境変数 PYTHON に Shaling を実行するための Python コマンドラインを設定してください。

設定例:
$ export PYTHON="python2.4 -E -O"
(ここで指定している -E -O オプションは実行速度を上げるためのものです)

2. 設定ファイル .shalingrc を書く

次に、ホームディレクトリ上に設定ファイル .shalingrc を作成します。 先ほどの shaling-dist/etc/ ディレクトリ内に サンプルの設定ファイルが含まれていますので、 これをホームディレクトリにコピーして編集します。

$ cp etc/shalingrc.sample ~/.shalingrc
$ vi ~/.shalingrc

.shalingrc ファイルの中身は Python スクリプトであり、 これは Shaling を起動する際に毎回実行されます。 したがって、このファイルの内容は Python の文法に従っている必要があります。 最低でも以下の 5つの変数を書き換えてください:

設定例:

TOP_DIR = '/home/username/Mail/'             (データベース用のディレクトリ)
SPOOL = '/home/username/.Maildir/new/'       (スプール名)
MY_FROM = 'Your Name <yourname@your.domain>' (From ヘッダ)
EDITOR = 'emacs %s'                          (使用するエディタ)
SMTP_HOST = ('smtp-server.your.domain', 25)  (SMTPホスト名とポート番号)
TOP_DIR (データベース用のディレクトリ)
Sharing で扱うメールを保存するデータベース用のディレクトリを文字列で指定します。 通常これは各ユーザのホームディレクトリ上におき、Mail などの名前にします。

SPOOL (スプール名)
メールスプールを指定します。 現在のところサポートされているスプール形式は mbox、 Maildir、 POP3 です (IMAP4 はサポートしていません)。 を指定します。

注意: Maildir を指定する場合は、 (cur, new, tmp を含む) 大元のディレクトリではなく、 新しいメールが配信される new ディレクトリを指定してください。

MY_FROM (From ヘッダ)
送信するメールの From: フィールドを指定します。 これは 'Yusuke Shinyama <yusuke@my.domain>' のような文字列にします。

EDITOR (使用するエディタ)
文書作成に使うエディタの呼び出しコマンドライン文字列を指定します。 この文字列は Python によって %s の部分が編集するファイル名に置き換わりますので、 必ず %s をひとつだけ含むようにしてください。代表的な例は 'vi %s''emacs %s' でしょう。

SMTP_HOST (SMTPホスト名とポート番号)
メールを送信する際の SMTPサーバの情報を ('ホスト名', ポート番号) のタプルで指定します。 SMTP AUTH や POP before SMTP は今のところサポートしていません。

その他のオプション

RULES (メールの振り分け規則)
メールの自動振り分け規則を書いたファイルのパス名を指定します。 複数の振り分け規則ファイルを指定することができるように、この変数はファイル名のリストになっています。 振り分け規則ファイルの書き方については振り分け規則ファイルを書くを参照してください。
RULES = [
  '/home/yusuke/rules.txt'
]

TERMINAL_CHARSET (端末の文字セット)
文字の表示に使う文字セットを指定します。デフォルトは euc-jp です。

MESSAGE_CHARSET (メールのデフォルト文字セット)
メールのテキスト部分に使う、デフォルトの文字セットを指定します。 日本語の場合は iso-2022-jp が慣例になっています。

LABELS (メールにつけるラベルとその名前の対応一覧)
Shaling では、各メールにラベルをつけることができます。 各ラベルはアルファベット 1文字で指定され、最高 52種類までのラベルが使えますが ('A''Z''a''z')、 各ラベルに (アルファベット 2文字以上の) 名前をつけることもできます。 この辞書は「ラベルの文字→ラベルの名前」の対応関係を指定するものです。 たとえば、以下の例では、ラベル 'i' が定義され、 このラベルは 'i' という文字を覚えるかわりに 'important' という名前でも 指定できるようになります。
LABELS = {
  'i': 'important'
}

MESSAGE_COLOR (ラベルとその表示色の対応一覧)
特定のラベルのついたメールは、特定の色で表示することができます。 ここではラベルとその色の対応関係を指定します。 ラベルはアルファベット 1文字あるいは (LABELS で定義した) ラベル名で指定します。 たとえば以下の例では、ラベル 'important' のついているメールは黄色で、 ラベル 'ml' のついているメールは緑色で表示されます。 前のほうで指定されている色ほど優先順位が高く、 複数のラベルがついたメールは、最初にマッチしたラベルの色で表示されます。
MESSAGE_COLOR = [
  ('important', 'yellow'),
  ('ml', 'green),
]
なお、ここで使える色は ANSI 端末に準拠しており、 black, red, green, yellow, blue, magenta, cyan, white です。背景色を指定する場合は bg_red のように色の先頭に bg_ をつけてください。 複数の色は + 記号で組み合わせることができます。たとえば 'white+bg_red' という指定は 背景色が赤で白い文字を表示します。色以外にも、 bolditalicunderline という指定も (端末がサポートしていれば) 使うことができます。

COMMAND_ALIASES (コマンドのエイリアス)
Shaling 内で使うコマンドのエイリアスを定義します。 エイリアスは基本的に特定のコマンド名を置換するだけであり、 tcsh のエイリアスのように変数や関数を使うことは今のところできません。 これらのエイリアスは、Shaling をアプリケーションとして独立に使うのであれば Shaling 内部で解釈され、Shaling コマンドをシェルからじかに実行する場合は シェルのエイリアスに組み込まれます。
COMMAND_ALIASES = {
  'all': 'scan all',
  'next': 'scan -N',
  'prev': 'scan -P',
}

ADDRESS_ALIASES (アドレスのエイリアス)
メールアドレスのエイリアスを定義します。このアドレスはメールを書く際に自動的に展開されます。
ADDRESS_ALIASES = {
  'yusuke': 'Yusuke Shinyama <yusuke@my.domain>',
}

なお、Shaling には既存のメールからアドレスを検索する機能があるため (メールを書く を参照)、 それほど沢山のエイリアスを指定する必要はありません。

MIME_HELPER (外部アプリケーションの指定)
画像や PDF などの添付ファイルを表示するためのアプリケーションを指定します。

DEFAULT_PAGER (ページャの指定)
画面サイズ以上のメールを表示するときに使う外部ページャの名前を指定します。 このアプリケーションは標準入力からテキストを読み込む必要があります。 デフォルトでは less あるいは環境変数 PAGER の値になっています。

PRINTABLE_HEADERS (デフォルトで表示するヘッダの一覧)
デフォルトで表示するヘッダの一覧。 show コマンドでは、メールのヘッダはここに指定した順序で表示されます。

EDITABLE_HEADERS (編集可能なヘッダの一覧)
comp あるいは edit コマンドで編集できるヘッダの一覧。

HEADER_COLOR (ヘッダの表示色)
メール中のヘッダ部分の表示色をヘッダごとに指定できます。

シェルの設定

シェルの設定で行うことは、基本的に以下の 2つだけです:

shaling_aliases は、Shaling で使うコマンドを、 シェルから直接呼び出せるようにするためのエイリアスを定義します。 shaling_aliases を実行すると、以下のような 出力が得られます:

$ shaling_aliases
alias apply="shaling apply";
alias cleanup="shaling cleanup";
alias comp="shaling comp";
alias edit="shaling edit";
alias get="shaling get";
alias inc="shaling inc";
alias label="shaling label";
alias mime="shaling mime";
alias resolve="shaling resolve";
alias scal="shaling scan";
alias send="shaling send";
alias show="shaling show";
alias next="shaling next";
alias all="shaling all";
alias n="shaling n";
alias p="shaling p";
alias repl="shaling repl";
alias prev="shaling prev";
alias forw="shaling forw";
alias rmm="shaling rmm";

あとはこれを eval に通せばエイリアスが定義されます。

etc/rc.bashetc/rc.tcsh も参考にしてください。


3. データベースを作成する

先ほど TOP_DIR に設定したディレクトリ名 (たとえば ~/Mail/) に対して、 以下のように実行します。

$ shaling_maildb create ~/Mail/

すると、~/Mail/ 以下にはつぎのようなディレクトリができているはずです。

$ ls -l ~/Mail/
total 16
drwx------    4 yusuke       4096 Jan  6 22:44 inbox
drwx------    2 yusuke       4096 Jan  6 22:44 sel
drwx------    2 yusuke       4096 Jan  6 22:44 tmp

ここまで来たら、Shaling を使う準備ができたことになります。


4. 振り分け規則ファイルを書く (オプション)

Shaling では、新着メール (あるいは既存のメール) をタイトルや差出人、件名などによって 自動的に分類 (ラベルづけ) することができます。 この分類のための規則は、.shalinrcRULES 変数で指定される、 規則ファイルと呼ばれるテキストファイル内に以下のような構文で記述します:

[ラベル名]
述語1: 値1
述語2: 値2
...

各ラベル名のあとに、1つ以上の述語・値の指定が続きます。 各述語は論理積 (and) で組み合わされます。 たとえば、以下の例では、From 行が "someone@important.domain" で、 かつ、Subject に "very important" という文字列を含んでいるメールに、 "important" というラベルがつけられます。(# 以降はコメントです)

# 重要なメールに "important" のラベルをつける。
[important]
From: someone@important.domain
Subject: very important

指定できる述語は以下のとおりです。 なお、述語の前に - または ! 文字をつけると否定の意味になります。 述語によっては値に * を使ってワイルドカードを指定できますが、 この値の意味は述語によって違ってきます:

From, To
メールの From あるいは To ヘッダの内容を指定します。 (なお、To を指定した場合、実際にはそのメールの Cc の値も検査されます。) "@" マークが含まれている場合、この値は From の中のアドレスと比較され、 "@" マークが含まれていない場合、この値は From の中の名前フィールドと比較されます。 アドレスの指定方法は以下のとおりです:

Subject
メールの Subject ヘッダの内容を指定します。 この値は Python 正規表現のパターンとして扱われ、ヘッダの内容にマッチするかどうかが検査されます。

Date
メールの相対的な日付を指定します。現在のところ指定できる値は today (24時間以内に届いたメール) あるいは future (未来の日付になっているメール) の 2つのみです。

Label
そのメールにすでにつけられているラベルを指定します。 複数のラベルをつけたい場合は、すでにつけられているラベルをもとに メールを判断することができます。 ワイルドカード "*" を指定すると、 なんらかのラベルがつけられているメールすべてにマッチします。

振り分け規則はファイルの先頭から順に検査され、マッチしたものからラベルがつけられていきます。 ひとつのメールは複数の規則にマッチすることもあり、その場合は複数のラベルがつけられます。 ただし、以下の例における [important!] のように、 ラベル名の後に ! がついている場合、 この規則にマッチしたメールはその時点でラベルが決定され、 以降の規則はすべて無視されます。

振り分け規則の例:

# junky@evil から来るメールにはすべて "junk" のラベルをつけ、これ以降の規則は無視する。
[junk!]
From: junky@evil

# ドメイン important.domain から来るメールには、すべて "important" のラベルをつける。
[important]
From: @important.domain

# ラベル "important" がついていないメールで Subject に "get $$$" を含むメールには "junk" のラベルをつける。
[junk]
-Label: important
Subject: get \$\$\$

5. 既存のメールを取り込む

Shaling が実行できる状態で、 以下のように実行すると "Not found." と表示されるはずです。

$ shaling scan all
Selection: all
Not found.

これは、メールがまだデータベース中に一通もないことを示しています。 既存のメーラからメールを取り込むには次のようにします。

$ inc スプール名

ここでスプール名は mbox 形式または Maildir形式の スプールのパス名を指定します (MH などで使われていた、1ファイルに 1メッセージが入っているものは、基本的に Maildir形式と同じです)。 mbox 形式のスプールを指定する場合は、そのファイル名 ('/var/spool/mail/yusuke' など) を指定し、 Maildir 形式のスプールを指定する場合は、そのディレクトリ名 ('/home/yusuke/.Maildir/new/' など 末尾に / を含むもの) を指定します。 pop3 形式のスプールを指定する場合は、'pop3:ホスト名,ユーザ名,パスワード' のような形式で指定します。なお、このさい , の前後にはスペースを入れてはいけません (この形式は、将来変更される可能性があります)。

取り込むメールにあらかじめ特定のラベルをつけておきたい場合は、 以下のように指定します:

$ inc +ラベル スプール名

Mutt などから移行する場合で、 元のメールが入っていたディレクトリごとに別のラベルをつけたいときは 以下のようなシェルスクリプトを書けばよいでしょう:

cd ~/Mail/
for i in inbox outbox draft nyu ref; do
  inc +$i ./$i/
done

6. 使う

Shaling では、メールの読み書きはすべてコマンドを使っておこないます。

Shaling には 2つの起動方法があります。 ひとつは Shaling をアプリケーションとして起動しコマンド入力をおこなう方法で、 もうひとつは UNIX シェルから個々の Shaling コマンドを直接実行する方法です。

Shaling を独立して起動する場合

Shaling アプリケーションとして起動する場合は、 コマンドラインで shaling とタイプします。 「Shaling>」というプロンプトが表示されるので、 あとは通常の Shaling コマンド (以下参照) を入力します。

$ shaling
Welcome to Shaling version-20070228.
Shaling> scan (コマンドを入力)
...

UNIX シェルとの統合的な環境で使用する場合

UNIX シェルからじかに個々の Shaling コマンドを実行する場合は、 まず shaling_alias を実行してその出力を eval します。 これは、scanshaling scan のようなエイリアスを定義するようになっており、 このエイリアスは各コマンドごとに Python インタプリタを起動します。

a. メールを検索する

Shaling では「フォルダ」という概念が存在しません。 受けとったメール、および送信したメール、書きかけのメールは すべて同一のデータベースに保存され、必要に応じてここからメールを検索し「選択」した状態にします。 この選択されたメールの集合に対して、表示・編集・ラベル付けをおこなうわけです。 これは SQL の SELECT 文でテーブルを作成し、それに対して操作を行うのに似ています。

たとえば、データベース全体から「ニューヨーク」という文字列が含まれているメールを選択するには scan というコマンドを使います:

> scan ニューヨーク
Selection: "ニューヨーク"
  1:+ 06/12/21  eny@mailmz.emb-jap.. [to] [在ニューヨーク総領事館]【お知らせ】邦.. >> ... Subject: [在ニューヨーク総領事..
  2:  06/12/19  eny@mailmz.emb-jap.. [to] [在ニューヨーク総領事館]【緊急メール】.. >> ... Subject: [在ニューヨーク総領事..
  3:  06/12/14  eny@mailmz.emb-jap.. [to] [在ニューヨーク総領事館]【緊急メール】.. >> ... Subject: [在ニューヨーク総領事..
...
1-20 of 324 results.

選択されたメールは、デフォルトで最大 20件までが表示されます。 (次の 20件を表示するには next (あるいは scan -N) を実行します。) 日付の新しいものほど上になります。以後、別の scan コマンドを実行するまで、 この検索結果のメールすべてが「選択」された状態になっています。 選択されている各メールは左側のインデックス番号 (1, 2, 3, ... ) で指定することができます。 たとえば、ここで選択されている最初 (1番目) のメールを詳細表示するには show コマンドを使います:

> show 1
*** 1: (83110) [to]
Date: Fri, 22 Dec 2006 05:36:54 +0900
From: eny@mailmz.emb-japan.go.jp
Subject: [在ニューヨーク総領事館]【お知らせ】邦人安否確認システムのテスト運用

          <<<総領事館からのお知らせ>>>

在留邦人の皆様へ

 年末・年始に「全米・カナダ邦人安否確認システム」をテスト運用!
...

次のメールを表示するには show 1 と入力するか、 あるいは n と入力します (nshow -N へのエイリアスです):

> n
*** 2: (82845) [to]
Date: Wed, 20 Dec 2006 05:06:23 +0900
From: eny@mailmz.emb-japan.go.jp
Subject: [在ニューヨーク総領事館]【緊急メール】病原性大腸菌O157感染の流行、終了

在留邦人の皆様へ
                             
    当地における病原性大腸菌O157感染流行の終了について

 14日付、CDC(米国疾病管理予防センター)ホームページに原性大腸菌O
157感染の流行について続報がありましたので、概要をお知らせいたします。
...

n を入力するたびにメールは次のものへと移っていきます。 この後、検索条件を指定せず単にもう一度 scan と入力すると、現在の選択範囲を表示します:

> scan
Selection: "ニューヨーク"
  1:+ 06/12/21  eny@mailmz.emb-jap.. [to] [在ニューヨーク総領事館]【お知らせ】邦.. >> ... Subject: [在ニューヨーク総領事..
  2:  06/12/19  eny@mailmz.emb-jap.. [to] [在ニューヨーク総領事館]【緊急メール】.. >> ... Subject: [在ニューヨーク総領事..
  3:  06/12/14  eny@mailmz.emb-jap.. [to] [在ニューヨーク総領事館]【緊急メール】.. >> ... Subject: [在ニューヨーク総領事..
...
1-20 of 324 results.

Shaling では、「いま着目しているメール」という概念があります。 いま着目しているメールには下線が引かれています。 このメールは、インデックス番号のかわりに . (ピリオド) でも表すことができます。

現在データベースに格納されているメールをすべて選択する場合は scan all を実行します。この場合、データベースにあるすべてのメールが日付順に表示されます:

> scan all

Shaling では、検索条件としてメール本文中 (と添付ファイル) に含まれている文字列のほか、 差出人アドレスやメールの subject:、日付、ラベルなどが指定できます。 たとえば、@nyu.edu というアドレスから来たメールを検索するには、 次のようにします:

> scan from:@nyu.edu
Selection: "from:@nyu.edu"
  1:+15:29 Wed  NYU Graduate Stude.. [nyu] [src-gradlife] NYU Student Resource Ce.. >> ... From: NYU Graduate Student Li..
  2: 14:10 Tue  Carol Hutchins       [nyu] [Dept] news on forthcoming PR campaign.. >> ... From: Carol Hutchins <carol.h..
  3: 11:28 Mon  Department of Comp.. [nyu] Grader & Tutor Positions Available in .. >> ...  of Computer Science <Michael..
...

検索条件は複数個指定することもできます。 この場合、複数の条件は「かつ (and)」によって組み合わされます。 たとえば "linux" "scsi" "raid" の語がすべて含まれていて、 さらに "nylug" のラベルがつけられているメールを検索するには次のようにします。 ラベルのついたメールは、"+ラベル名" のような条件式で検索できます:

> scan linux scsi raid +nylug
Selection: "linux" "scsi" "raid"
  1:+ 06/09/07  plener2@verizon.ne.. [ml, nylug] [nylug-talk] dell server to give away >> ... next letter--drive bays ar..
  2:  06/08/25  jh                   [ml, nylug] [nylug-talk] OT: SATA<->SCSI RAID encl.. >> ... Subject: [nylug-talk] O..
  3:  06/02/07  Steven Lembark       [ml, nylug] Re: [nylug-talk] Throw hardware at it... >> ... with > 8-10 500GB S/ATA..
...

新しく検索を行うと、それまでの選択は解除され、新しい選択範囲が作りなおされます。 なお、この場合でも Shaling はデフォルトで過去 10個までの選択範囲を保存しており、 以前の選択結果を呼び出すことができます。詳しくは sel コマンドを参照してください。

また、thread コマンドを使うと、 指定したメールが含まれているスレッドのメールをすべて選択することができます。 これはメールにつけられている Message-IDReferences ヘッダをもとに スレッドを検索します。

> thread
Selection: "references: <20070308174130.GA23722@calimero.vinschen.de> <200703072310.l27NAMxP006468@cvs.openbsd.org> <200703072310.l27NAMxP006468@cvs.openbsd.org>"
  1:+10:00  ..  Corinna Vinschen     [ssh, ml] Re: Announce: OpenSSH 4.6 released >> From: Corinna Vinschen <vinschen@re..
  2: 17:11 Wed  Darren Tucker        [ssh, ml] Re: Announce: OpenSSH 4.6 released >> From: Darren Tucker <dtucker@zip.co..
  3: 16:57 Wed  Darren Tucker        [ssh, ml] Re: Announce: OpenSSH 4.6 released >> From: Darren Tucker <dtucker@zip.co..
  4: 15:25 Wed  Darren Tucker        [ssh, ml] Re: Announce: OpenSSH 4.6 released >> From: Darren Tucker <dtucker@zip.co..
  5: 12:41 Wed  Corinna Vinschen     [ssh, ml] Re: Announce: OpenSSH 4.6 released >> From: Corinna Vinschen <vinschen@re..
  6: 18:10 Tue  Damien Miller        [ssh, ml] Announce: OpenSSH 4.6 released >> From: Damien Miller <djm@cvs.openbsd.or..
1-6 of 6 messages.

b. メールを書く

メールを書く場合には comp コマンドを使います。 引数として相手のアドレスを渡すと、あらかじめ環境変数 (あるいは .shalingrc) で 設定したエディタが起動し、メールを作成できます。

> comp shinyama@example.com
(エディタが起動する)
From: Yusuke Shinyama <yusuke@my.domain>
To: shinyama@example.com
Cc:
Bcc:
Label: draft
Subject: 

宛て先アドレスとして @ を含まない文字列を指定した場合、 過去のメールからその文字列を含むアドレスが検索され、もっとも妥当と思われるアドレスが自動的に入力されます:

> comp 新山
(エディタが起動する)
From: Yusuke Shinyama <yusuke@my.domain>
To: 新山 祐介 <shinyama@example.com>
Cc:
Bcc:
Label: draft
Subject: 

メールの編集が終わると、そのメールはデータベースに格納されます。 Shaling では、書きかけのメールも送信済みのメールもすべて (受けとったメールと) 同一の データベースに格納されます。ただしこの場合は "draft" というラベルがつけられ、 他のメールとは区別されます。

comp コマンドが終了すると、いま編集したメールだけがデータベース上で選択された状態になります:

> comp shinyama@example.com
(…メールを書く…)

Selection: all
  1:+20:17 Thr  Yusuke Shinyama      [draft] Issues on Japanese text >> Hello, I'd like to ...
1-1 of 1 results.

ここで、send コマンドを使うと、"draft" ラベルのついているメールを 送信することができます。

> send
From: 'yusuke@my.domain'
Rcpt: ['shinyama@example.com']

ここで使われている . (ピリオド) は、 たったいま編集したメールを指定するのに使われています。

c. 新着メールを取り込む

新着メールをデータベース中に取り込むには、inc コマンドを使用します。

> inc
Selection: all
  1:+21:40  ..  Darren Tucker        [ssh, ml] Re: "Out of memory" error lo.. >> Simon Vallet wrote:...
  2: 05:21  ..  Simon Vallet         [ssh, ml] "Out of memory" error lookin.. >> Hi, we're currently...
...

inc コマンドを実行するとそれまでの選択範囲が解除され、 新しく取り込まれたメールだけが選択された状態になります。

d. メールにラベルをつける

Shaling ではメールにラベルをつけることができます。 Shaling では、受けとったメールや書きかけのメール、送信済みのメールなどはすべてラベルによって区別されます。 削除されたメールも「削除」のラベルがつくだけで、実際に削除されることはありません。 ラベルはひとつのメールに複数個つけることができ、 現在ついているラベルによってメールを色分け表示することもできます。

ラベルをつけるには、label コマンドを使います:

> label +important 1
Selection: all
  1:+21:40  ..  Darren Tucker        [ssh, ml] Re: "Out of memory" error lo.. >> Simon Vallet wrote:...
  1: 05:21  ..  Simon Vallet         [ssh, ml, important] "Out of memory" error lookin.. >> Hi, we're currently...
...

ラベルの名前は +ラベル名 のように指定します (すでについているラベルを削除するには -ラベル名 のように指定します)。 すべてのラベル名は基本的にアルファベット 1文字で表され、 上の例での "important" のような名前を使うためには、 あらかじめ .shalingrc の変数 LABELS に ラベル名と文字との対応を登録しておく必要があります。 (ラベル i に 名前 important が指定されている場合、 +important のかわりにただ +i と指定してもかまいません。)

# .shalingrc
LABELS = {
 'i': 'important,
 ...
}

ラベルのついたメールを検索するには、検索条件に +ラベル名 を指定します。 たとえば以下の操作ではラベル "important" のついたメールすべてが選択されます:

> scan +important
Selection: all
  1: 05:21  ..  Simon Vallet         [ssh, ml, important] "Out of memory" error lookin.. >> Hi, we're currently...
  2: 15:18 Thu  Santiago Pizzini     [nyu, important] [Phd-students] Phd Research Orientatio.. >> From: Santiag...
...

e. 添付ファイルの操作

メールに添付ファイルがついている場合、以下のようなフッタが表示されます:

> show 12
Date: Wed, 10 Jan 2007 14:10:50 -0600 (CST)
From: "U.S._Postal_Service_"<U.S._Postal_Service@usps.com>
Subject: USPS Proof of Delivery Info 

--- :1 [text/plain]

  This is a post-only message. Please do not respond.
  Service Type: Express Mail
  Thank you for requesting a Proof of Delivery letter on your shipment.

...
== multipart/mixed :1 [text/plain] :2 [application/pdf] "EI651713775JP.pdf"

上のメールは 2つの部分からなっています。本文 (:1) と、 添付された PDF ファイル (:2) です。 これらの部分を表示するには インデックス番号:MIMEパート番号 のような形式で指定します (例. 12:2)。 現在着目しているメールであれば、インデックス番号は省略できます。

> show :1
(本文のみを表示する)
> show :2
(添付PDFを表示する - xpdf が起動)

添付ファイルを保存するには get コマンドを使います。 ファイル名を尋ねてくるので、保存したいファイル名を入力します。 ここでただ Enter を押すとメール中で指定されているデフォルトの名前になります。

> get :2
Filename [EI651713775JP.pdf]  (Enter を押す)
(該当部分が EI651713775JP.pdf という名前で保存される)

ファイルを添付したメールを送る場合は、まず comp コマンドでメールを作成してから、 mime コマンドを使ってファイルを添付します。

> comp shinyama@example.com
(…メールを書く…)
> mime . mydocument.pdf
(いま書いたメールに PDF ファイル mydocument.pdf を追加する)
> send .
(送信する)

f. 検索データベースの整理

Shaling では、内部で使用している検索用のデータベースを 定期的に整理 (最適化) する必要があります。 これは何もせずデータベースに新しいメールを追加していくと、しだいに検索速度が低下するためです。 データベースを整理するには、単に cleanup というコマンドを実行します:

> cleanup
Merging...

データベースの整理は最低でも数日に 1回程度は実行してください。 整理には通常数秒〜数十秒かかるため、 これは普段ユーザが使用していない時間に cron などで実行してもかまいません。 なお、データベースの整理中もユーザはメールを検索したり読んだりすることはできますが、 新しいメールの追加や編集はできません。


基本コマンド・リファレンス

apply [-r 規則ファイル] [-n] [-v] [-R] インデックス番号 ...
与えられた規則ファイルに従って、メールに自動的にラベルをふります。 規則ファイルが与えられない場合、.shalingrc で指定されている規則ファイルを使用します。 規則ファイルの文法については振り分け規則ファイルを書くを参照してください。

cleanup
メール検索用データベースを整理します。整理には通常数秒〜数十秒かかります。 なお、整理中もメールを検索したり読んだりすることはできますが、新しいメールの追加や編集はできません。

comp [-g] [-r] [-F] [-s 件名] [+ラベル] [インデックス番号] [宛て先1 宛て先2 ...]
新たなメールを作成し、データベースに格納します (cf. メールを書く)。 既存のメールのインデックス番号を指定すると、そのメールに返信するメールを作成します。 元のメールを引用する場合は、-r オプションを指定してください。 保存したメールには "draft" のラベルがつけられます (これは後にこのメールを送信すると "deleted" のラベルに変更されます)。

edit [-f] インデックス番号
既存のメールを修正します。 通常編集できるメールは "draft" のラベルがついているものだけです。 なお、「編集」といっても、データベース中の古いメールが上書きされるわけではありません。 古いメールは "deleted" のラベルをつけてそのまま残され、編集後のメールが新しく追加されます。

get [-f フィールド名] [-F フィールド名] [-o ファイル名] インデックス番号[:パート番号]
メールから添付ファイルやヘッダを抜き出します。 添付ファイルにファイル名がつけられている場合は、ユーザの確認の後、 その名前でカレントディレクトリにファイルを保存します。 そうでない場合は -o オプションによりファイル名を指定する必要があります。 ヘッダの

inc [-q] [-E] [-P] [-r 規則ファイル] [+ラベル] [スプール名1 スプール名2 ...]
新しく届いたメールをデータベース中に取り込み、それらが選択された状態にします (cf. 新着メールを取り込む)。 各メールは与えられた (あるいはデフォルトの) 規則ファイルにしたがってラベルづけされます。 スプール名が省略された場合は .shalingrc で指定されている デフォルトのスプールからメールを取り込みます。このような場合、通常スプールのメールは消去されますが、 -P (preserve) オプションをつけることによりメールをスプールに残すことができます。 いっぽう、デフォルトでないスプールからメールを取り込んだ場合は -E (erase) オプションをつけないかぎり、そのスプールの内容が削除されることはありません。

label [-R] {+ラベル|-ラベル} ... インデックス番号1 インデックス番号2 ...
メールにラベルをつけます (cf. メールにラベルをつける)。 通常ラベルは追加 (+ラベル) あるいは削除 (-ラベル) され、 すでにメールについている他のラベルはそのまま残されます。

mime [-R] [-m MIME形式] [-c 文字コード] インデックス番号:[パート番号] [ファイル名 ...]
メール中の添付ファイルを操作します (cf. 添付ファイルの操作)。 パート番号が与えられない場合は指定されたメールに ファイル名で指定される添付ファイルを追加し、 パート番号が与えられた場合はそのメール中の指定されたパートの添付ファイルを置き換えます。 -R (remove) オプションが指定された場合、そのパートの添付ファイルを除去します。 なお、添付ファイルの MIME 形式については、ファイル名から推測されるものであれば自動的に推測されますが、 そうでない場合は -m (mimetype) オプションで指定する必要があります。 テキストファイルを添付する場合は、-c (encoding) でオプションで 文字コードを指定する必要があります。

resolve 宛て先1 宛て先2 ...
指定された宛て先に対応するアドレスを表示します。 宛て先は From:, To:, Cc: のいずれかに含まれている アドレスから検索されます。複数の候補が見つかった場合は過去 10件の統計をとり、 それらのアドレスを頻度の高い順に表示します。

scan [-n 表示メール数] [-a] [-P|-N] [-O] [検索条件1 検索条件2 ...]
与えられた検索条件でデータベース中のメールを検索し、選択状態にします (cf. メールを検索する)。 検索条件が省略された場合は、現在選択されているメールの一覧を表示します。 通常は "deleted" (消去されたメール)、"junk" (ジャンクメール)、あるいは "sent" (送信したメール) の ラベルがついたメールは表示されませんが、これらは -a オプションを与えることで表示できます。 なお、一度に表示されるメールはデフォルトでは 20件で、この数は -n オプションによって変更できます (-n 0 を指定すると選択されているすべてのメールを表示します)。 途中までしか表示されなかった一覧は、-P あるいは -N あるいはオプションを 追加することで「前の 20件」「次の 20件」をそれぞれ表示できます。 (デフォルトでは、 これは prevnext というコマンドエイリアスにそれぞれ割り当てられています。)

send [-q] [-f] インデックス番号1 インデックス番号2 ...
メールを SMTP サーバに送信します (cf. メールを書く)。 送信できるメールは "draft" のラベルがついているものだけです。 送信時にはメールのヘッダがチェックされ、送り元と宛て先アドレスの一覧が表示されます。 送信したメールは "sent" のラベルがつけられ、 以後検索結果には (デフォルトでは) 含まれなくなります。

sel [-q] [-n 表示メール数] [選択範囲番号]
Shaling では、デフォルトで過去 10個までの選択範囲が保存されています。 このコマンドは現在保存されている選択範囲の一覧を表示したり、 以前の選択範囲に戻したりするのに使います。 引数なしで sel コマンドを実行すると、 現在保存されている選択をすべて表示します。 このさい -n オプションで表示メール数を指定すると、 実際にその選択範囲における最初のメールを何件か表示します。 引数に選択範囲番号をつけて sel コマンドを実行すると、以前の選択範囲を復元します。

show [-l] [-a] [-h] [-c 文字集合] [-P|-N] [インデックス番号1[:パート番号1] インデックス番号2[:パート番号1] ...]
指定されたメールの内容を表示します (cf. メールを検索する)。 1画面に入りきらない場合は、最初の部分だけが端末の大きさに合わせて折り返し・切り取りが行われます。 メールに添付ファイルがつけられている場合、 パート番号が指定されている場合はその部分だけを表示し、 パート番号が指定されていない場合はメール全体を表示した後に 添付ファイルとパート番号の対応一覧が表示されます。 なお、画像などの添付ファイルを表示するさいには .shalingrc 設定ファイルの MIME_HELPER で指定された 外部プログラムを使います。 インデックス番号が指定されない場合は現在着目されているメールを表示します。 いちど表示されたメールは「着目された」状態になり、 ここから -P または -N オプションで、 着目しているメールを前後に移動させることができます。

thread [インデックス番号1 インデックス番号2 ...]
指定されたメールに関連するスレッドのメールをすべて選択します。 なお、このコマンドは、シェル上で scan "references: `get -F message-id,in-reply-to,references`" を実行したのと同じです。

エイリアスによって実現されているコマンド

以下のコマンドはデフォルトでエイリアスによって実現されています。 これらのエイリアスは .shalingrcCOMMAND_ALIASES 変数によって 変更することができます。


技術的な情報


バグ・TODO


ライセンス

(いわゆる MIT/X ライセンスです、改変・再配布および商品への組み込みはご自由に)

Copyright (c) 2006-2007 Yusuke Shinyama <yusuke at cs dot nyu dot edu>

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


Yusuke Shinyama