『Mew-1.93』

Messaging in the Emacs World

// みゅう //

Copyright (C)1996, 1997, 1998 山本和彦


はじめに読んでね

Mew とは、

を統合し、簡単に読み書きするためのインターフェイスです。Mew を使えば、友 達の誕生日にケーキの絵と「Happy Birthday to You」の歌を添えたメッセージ を暗号化して送れます。ネットニュースの統合は、2.xx 以降で予定しています。

Mew は 「Messaging in the Emacs World」 の略です。先頭の M は大文字で表 記し、「みゅう」と読みます。M で始まるかわいらしい単語を選んだ結果 Mew になりました。決して漫画の題名や某アイドルの歌、あるいは、関西の会社に因 んでいるわけではありません。:p

Mew バージョン 1.xx の特長を以下に示します。

Mew は、Emacs 19.28、19.34、20.2 以降、Mule 2.3 以降、および、XEmacs 20.3以降をサポートしています。これら以外の Emacs、たとえば、Emacs 18、 Nemacs、Mule 1 および XEmacs 19、20.2 などはサポートしていませんし、今後 もサポートする予定はありません。また、beta リリースである Emacs をサポー トすることもありますが、正式リリースになって仕様が変わったときは、正式リ リースである Emacs の仕様に合わせます。

このマニュアルで単に Emacs と言った場合には、サポートしている全てのプラッ トフォームを意味します。Mule といった場合は、多国語が利用できる Mule 2 と Emacs 20、そして、--with-mule オプション付きでコンパイルした XEmacs 20.3 を指します。これに対し、Bilingual Emacs と言った場合には、英語と Latin 1 しかサポートしていない Emacs 19 と --with-mule オプション無しで コンパイルした XEmacs 20.3 を意味します。また、XEmacs と言った場合には、 グラフィックを楽しめる XEmacs 20.3 を指します。反対に、テキストしか表示 できない Emacs は、Text Emacs と呼びます。

さぁ始めよう!

Mew には次の4つのモードがあります。

Mew を起動するには、以下の方法があります。

  1. `M-x mew' :: Mew を起動する。`mew-auto-get'`t' なら、 到着したメッセージを +inbox フォルダに保存しながら、+inbox のメッセージ を Summary モードに一覧表示。`mew-auto-get'`nil' なら、単 に +inbox のメッセージを Summary モードに一覧表示。
  2. `C-uM-x mew' :: `mew-auto-get' の値を逆だと思って、`M-x mew' を実行する。
  3. `M-x mew-send' :: メッセージを書くための Draft モードへ移行。

Text Emacs で Mew を起動した際には、Mew を型どった「/\\ - \\/」という図 形がくるくると回るデモが始まります。XEmacs では、可愛い2匹の子猫がオープ ニングを飾ります。

このとき Mew は、フォルダ名を集めるなどの作業をしています。もし起動が遅 いなと思ったら、See section Mew の起動を速くする の対処方法を読んで下さい。

メッセージを表示する

`M-x mew' と入力すると、Mew はスプールのメッセージを +inbox フォル ダに移して以下のように一覧表示します。

    1  07/17 いとぢゅん     v6: items to be no in6_pcbnotify()がなにも
    2  07/18 歌代先生       Re: behavior after これ、mark-ring がどんど
    3  07/19 のむさん       refile info.       乃村です。遅くなりました。

これを Summary モードといいます。ここでは、主に Summary モードでのメッセー ジの読み方について説明します。

読み方の基礎

メッセージを上から順に読んでいくのであれば、`SPC' を適宜押すだけで す。簡単でしょ?

しかしそれだけではあんまりなので、以下にページを操作する基本的なコマンド を示します。

`SPC'
メッセージを読み進める。つまり、メッセージを表示し、スクロールさせ、他の メッセージに移動して表示する。移動の方向は、 `mew-summary-show-direction' を参照のこと。`up', `down', `next'(現在の方向) `stop' が選択できる。デフォルトは `down'
`DEL'
現在のメッセージを上にスクロールさせる。不必要なヘッダフィールドは、ウイ ンドウの上に隠れている。よって、`DEL' を入力すると、それらが現れる。
`.'
現在のメッセージを強制的に表示する。非 MIME 解析モードの場合は、強制的に 解析する。
`RET'
現在のメッセージを1行上にスクロールする。
`M-RET'
`-'
現在のメッセージを1行下にスクロールする。
`C-n'
下の行へ移動。
`C-p'
上の行へ移動。
`n'
下方向に移動し表示。対象となるのは、パート、`*' マークの付いたメッ セージ、マークの付いていないメッセージ。`C-u' と共に呼ばれると、パー ト部分を飛ばす。
`p'
上方向に移動し表示。対象となるのは、パート、`*' マークの付いたメッ セージ、マークの付いていないメッセージ。`C-u' と共に呼ばれると、パー ト部分を飛ばす。
`j'
入力された番号にしたがってメッセージへ移動。

MIME を表示する

マルチパートを読むのは別に大変なことではありません。今まで通り、 `SPC' を押していけばよいだけです。

マルチパートのメッセージは、以下のように日付の左に "M" という印が付いて います。

    4  07/19 しげやさん     Re: imget very fir ということで、こんなもん
    5 M07/20 としちゃん     small patch to ims imsetup.in にちょっとだけ
    6  07/21 もとのりさん   Re: imget very fir POPでサーバにメッセージの

"5" のところで、`SPC' を押すと、ヘッダを Message モードに表示すると 共に、以下のように Summary モードでマルチパートの構造を簡素に表示します。

    4  07/19 しげやさん     Re: imget very fir ということで、こんなもん
    5 M07/20 いとぢゅん     MagicPoint         今度の発表で使用する資料
B    2  Image/Gif                    MagicPoint のロゴ            mgp.gif
Q    3  Application/Postscript       資料                         ohp.ps
    6  07/21 もとのりさん   Re: imget very fir POPでサーバにメッセージの

もし、第1パートが Text/Plain なら、Summary モードには第1パートは可視化さ れず、そのかわり第1パートがヘッダと共に Message モードに表示されます。

マルチパートの各行は マーク、パート番号、データの型、説明、ファイル名
から構成されています。マーク、データの型、説明、ファイル名はそれぞれ、 Content-Transfer-Encoding:、Content-Type:、Content-Description:、 Content-Disposition: の値です。Content-Description: はパートに対する Subject: と考えられます。この表示は Draft モードの添付領域とほとんど同じ です。それぞれのカラムの詳しい意味は、See section マルチパートの作成 を参照して下さい。

`SPC'`n' でパート1へ進めば、そのパートがデータ型に応じて表 示されます。たとえば、Text/Plain なら Message モードで、PostScript なら ghostview で表示されます。

`n'`p' は、パート部分まで含んだ行を移動することに注意して 下さい。パート部分を飛ばして下のメッセージを表示するには `C-u n' と 入力して下さい。また、パート部分を飛ばして 1 つ上のメッセージを表示する には `C-u p' と入力して下さい。

Mew は、MIME を再帰的に処理します。以下は転送されたマルチパートのメッセー ジの例です。

  501 M02/22 Itojun         Fw: MagicPoint           伊藤先生からこんな
     2  Message/Rfc822               MagicPoint                          
B    2.2  Image/Gif                    MagicPoint のロゴ          mgp.gif
Q    2.3  Application/Postscript       資料                       ohp.ps

(メモ) テキスト以外のデータを、シングルパートとしてメッセージに格納する のは、書式としては間違いではありませんが、お勧めできません。マルチパート を作成し、そのパート1に説明のテキストを、パート2にテキスト以外のデータを 入れる作法をお勧めします。

テキスト以外のデータが本文に直接格納されているメッセージに対し、Mew はこ れをあたかもマルチパートように表示します。

PGP/MIME を表示する

今までと同様 `SPC' などを利用することで、Mew では PGP で暗号化や電 子署名を施されたメッセージを簡単に表示できます。まず、簡単な例から紹介し ましょう。

    8 S07/22 酒井さん       Re: home was full  MsgStore.pm のバグです
    9 E07/23 ニートすみかわ Wine               おはようからおやすみま

8番と9番のメッセージには、それぞれ "S" マークと "E" マークが付いています。 これはそれぞれ、本文全体が署名されている、および、暗号化されていることを 意味します。

PGP/MIME では、一部のパートに電子署名を施したり、暗号化したりできます。 この場合このようなマークは付きません。マークが付くのは、本文全体が対象に なっている場合です。

また、単に署名や暗号化と言いましたが、これは最終的な処理が署名や暗号化で あったことを意味しています。やや複雑なはなしになりますが、もしかすると前 者は本文全体を暗号化した後署名したのかもしれませんし、後者は一部のパート に署名しさらに全体を暗号化している可能性もあります。

本文全体、あるいは、一部のパートが暗号化されている場合、Mew はパスフレー ズを訊いてきます。入力されたパスフレーズは、あなたの秘密鍵を復号化するの に使われます。そして、復号化された秘密鍵によって、暗号化されているメッセー ジを解くわけです。ある PGP/MIME メッセージを表示するには、暗号化された数 だけパスフレーズを入力する必要があります。これは、安全をきして Mew がパ スフレーズをどこにも保存しないので、以前入力されたパスフレーズを再利用で きないからです。

******************************************************************** もし Emacs がローカルのコンピュータで動いていない場合は、パスフレー ズを入力しないで下さい。入力すると盗聴される恐れがあります。 ********************************************************************

一旦復号化されたメッセージはしばらく保存されるので、2回目の表示にはパス フレーズを訊かれないかもしれません。

一方、通信相手の署名を検証するためには相手の公開鍵が利用できればよいので、 パスフレーズを訊かれることはありません。

Mew は自動的に電子署名を検証したり、入力されたパスフレーズを使って暗号メッ セージを復号化したりして、もとのメッセージを表示します。そこで、ユーザが 署名の存在に気づかないかもしれませんし、どの部分が暗号化されていたのか分 からないかもしれません。

そこで、検証の結果やどの部分が暗号化されていかをユーザに通知するために、 Mew は以下のようにヘッダに X-Mew: フィールドを挿入します。

X-Mew: <body> PGP decrypted.
        Good PGP sign "kazu@mew.org" COMPLETE

"<>" 内の番号は、どのパートの結果であるかを示しています。"body" は、メッ セージの本文全体が保護されていることを意味します。この例では、メッセージ 全体が kazu によって署名され、受信者のために暗号化されています。Mew はま ずこれを復号化し、そして署名を検証しています。署名は正しいので、 kazu@mew.org という ID の付いた秘密鍵で署名されたときから、内容は変更さ れていないと分かります。この署名の検証に使われた公開鍵の「有効性」は "complete" です。よって、受信者はこの公開鍵が ID が示すユーザに属してい ると信頼していることになります。つまり、このメッセージは信頼をおいている 公開鍵によって検証され結果が正しいので、改竄されていないということになり ます。

以下の例では、まずマルチパートである本文全体の電子署名が検証され、その後 パート 2 のメール全体が復号化されています。つまり、作成時には、まずパー ト 2 が暗号化され、そして本文全体が署名されたことが分かります。

X-Mew: <body multi> Good PGP sign "kazu@mew.org" COMPLETE
X-Mew: <2 message> PGP decrypted.

するどい人なら、悪い人があらかじめ X-Mew: フィールドを挿入しておき、あなた をだますかもしれないと思うかもしれません。でも大丈夫です。Mew は、ヘッダに ある X-Mew: をあらかじめ削り、本物の X-Mew: フィールドを挿入しますから。

X-Mew: フィールドは他にもさまざまな結果を伝えてくれます。たとえば、署名 を検証するための公開鍵がないとか、復号化に失敗したなどです。以下の例は、 鍵 ID が 0x1B8BF431 である公開鍵がないことを示しています。

X-Mew: <body multi> No his/her public key. ID = 0x1B8BF431

この場合、`C-cC-f' と入力すると、Mew は `mew-pgp-keyserver-url-template' で指定された URL を使ってこの公開 鍵の入手を試みます。もし、X-Mew: フィールドがない場合は、`C-cC-f' は From: を ID と考えます。また、`C-uC-cC-f' は、X-Mew: フィールド に加えて `mew-x-pgp-key-list' に指定されたフィールドも鍵 ID を切り 出す対象とし、公開鍵の入手を試みます。

フォルダの更新と移動

到着したメッセージを +inbox フォルダに移動し、一覧を表示するには `i' を使います。一覧は、+inbox フォルダの Summary モードの最後に挿 入されます。

フォルダの一覧を再表示するには、`s' を使います。このコマンドは range を訊いてきます。Mew で重要な range の意味を以下に示します。

`update'
「Summary モードの最後のメッセージ+1」から「フォルダ内の最後のメッセー ジ」まで。つまり、Summary モードと実際のフォルダ内のメッセージの差分。
`all'
フォルダ内のメッセージ全て。Summary モードの表示がおかしくなったときに、 内容を一新するために用いる。

通常 range のデフォルトは、`update' となっています。ですから、 `s' の後に `RET' を押すだけで、現在のフォルダの最新一覧を得ら れることになります(Summary モードの移動に `g' を使うと、自動的に最 新の一覧を表示しようとします)。

Mew ではあまり重要ではありませんが、以下の range も指定できます。

`<num1>-<num2>'
<num1> から <num2> まで。
`<num>:N'
<num> から N 個。
`<num>:-N'
<num> までの N 個。
`first:N'
最初から N 個。
`prev:N'
現在のメッセージまでの N 個。
`next:N'
現在のメッセージから N 個。
`last:N'
最後のメッセージまでの N 個。

フォルダの移動には `g' を入力して下さい。フォルダ名は `TAB' で 補完できます。もし、移動した際に Summary モードの一覧が古いと判断した場 合は、range を訊いてきます。range のデフォルトは、+draft と +trash フォ ルダでは `all' になっています。それ以外では `update' になりま す。

送信、返答、転送

メッセージの送信、返答、転送には、以下のコマンドを使います。

`w'
メッセージを書く。新しい草稿が Draft モードに用意される。
`a'
現在のメッセージに返答する。Draft モードに草稿が用意され、To: や Cc: が 自動的に決定される。
`A'
現在のメッセージに返答する。Draft モードに草稿が用意され、To: や Cc: が 自動的に決定された後、本文が引用される。
`f'
現在のメッセージを第3者に転送する。Draft モードに草稿が用意され、現在の メッセージが自動的に添付される。
`F'
`@' マークの付いたメッセージを第3者に転送する。Draft モードに草稿 が用意され、`@' マークの付いたメッセージが自動的に添付される。詳し くは See section 複数 `@' を参照のこと。

エラーメッセージが返ってきたら、以下のコマンドで修正し再挑戦しましょう。

`E'
メッセージの再編集。または、MIME 形式でカプセル化されて戻ってきたメッセー ジの再編集。+draft フォルダでは、そのメッセージを直接編集。その他のフォ ルダでは +draft フォルダにコピーしてから編集。
`M-e'
"----- Original message follows -----" の後にオリジナルのメッセージが 引用されてるエラーメッセージの再編集。

メッセージのソート

フォルダ内のメッセージをソートするには `S' を使います。このとき次の ようにどのフィールドでソートするか訊いてくるので、ソートしたいフィールド 名を入力して下さい。

Sort by? (default date): 

ソートのモードを明示的に指定・変更したい場合には `:' で区切って指定 します。たとえば X-Mail-Count フィールドの内容を(テキストとしてではなく) 数値とみなしてソートしたい場合には、次のように入力します。

x-mail-count:num

なお、文字の大文字、小文字は区別しません。また、フィールド名やモードは `TAB' で補完できます。

ソートに関するコマンドをまとめると以下のようになります。

`S'
入力したフィールドを用いてフォルダ内のメッセージをソートします。 `C-u S' のように prefix を付けると、リージョン内のメッセージのみを ソートします。
`mS'
`*' マークの付いたメッセージをソートします。

便利な機能

Mew では、Summary モードに以下のような便利なコマンドが用意されています。

`v'
「Summary モードだけ」と「Summary & Message モード」の切り替え。 「Summary モードだけ」を選んでいる場合は、`d' は次のメッセージを表 示しないので、連続してすばやく `D' マークを付けられる。
`M-a'
「MIME 解析モード」と「非解析モード」の切り替え。「非解析モード」では、 本文を解析せず配送されたままの形で表示するので速い。
`M-l'
現在の行を Summary モードの中央に移動させる。
`C-cC-s'
Message モードで順方向差分検索。
`C-cC-r'
Message モードで逆方向差分検索。
`y'
メッセージをコピー、あるいは、パートを入力したファイル名で保存する。
`#'
現在のメッセージかパートを印刷する。
`|'
現在のメッセージかパートをパイプで出力する。
`O'
メッセージを番号詰めして、再び一覧表示する。
`B'
MIME でカプセル化された複数のメッセージをほどく。
`Z'
alias のリストを更新する。`C-uZ' では、alias に加えフォルダのリスト も更新する。`mew-use-folders-file-p'`t' ならフォルダのリス トを "~/Mail/.folders" に保存する。

化けたメッセージ

以下のようなメッセージは、charset がなく、US-ASCII と認識されてしまうの で、化けます。

To: kazu
Subject: 化けるメッセージ
From: Alice
MIME-Version: 1.0
Content-Type: Text/Plain

日本語の本文

このような場合は、`C-cC-l' を押すと、文字コードを正しく変換し表示し ます。

メッセージを作成する

ここではメッセージの作成方法について説明します。Mew では、MIME 形式のメッ セージだけを作成できます(MIME-Version: のないメッセージは作成できません)。

Draft モードに移行するには、次の2つの手段があります。

  1. `M-x mew-send' と入力する。
  2. Summary モードで `w' を押す。

すると、以下のようなバッファが用意されます。

To: 
Subject: 
X-Mailer: Mew version 1.93 on XEmacs 20.4
Mime-Version: 1.0
----

これを Draft モードといいます。草稿は、+draft フォルダの下に作成されます。 同時に複数の草稿を持つことが可能です。

以下、Draft モードの使い方を説明します。

ヘッダの補完

Draft モードにおいて、"----" から上をヘッダといいます。ヘッダでは `TAB' に対し、以下ように各フィールド用の完機能が割り当てられていま す。

<フィールド名の補完>

行頭の単語中で、しかも、上の行の最後が "," で終る継続行でなければ、 `TAB'`mew-fields' に定義されているフィールド名を補完できま す。

To: kazu@mew.org
R`TAB'

上記の場所で `TAB' を押すと以下のようになります。

To: kazu@mew.org
Reply-To: 

<アドレスの別名の補完と展開>

IM では、alias という機能を使って、長く分かりにくいアドレスに短く覚えや すい別名を付けられます。たとえば、

mine: m-sakura@ccs.mt.nec.co.jp 

という別名は、mine という文字列を m-sakura@ccs.mt.nec.co.jp で置き換え ることを意味しています。

Draft モードのヘッダ内で、かつ、アドレスを書くべきフィールド上で、しかも、 1文字以上の文字列が前にある場所で `TAB' を打つと、アドレスの別名が 補完されます。

例を挙げてみます。

To: toshi,
        mi`TAB'

このように `TAB' を押すと、(他に候補が無ければ) mine まで補完されま す。

To: toshi,
        mine`TAB'

もう一度 `TAB' を押すと m-sakura@ccs.mt.nec.co.jp に展開され ます。

To: toshi,
        m-sakura@ccs.mt.nec.co.jp

アドレスが補完できない場所で `TAB' を打つと、単に `TAB' が入り ます。たとえば、以下の例を考えて下さい。

To: mine,`TAB'

この場合、単に `TAB' が挿入されます。

"@"で終る文字列は強制的に展開します。たとえば、以下のように似たような alias があった場合を考えて下さい。

mine: m-sakura@ccs.mt.nec.co.jp 
mineo: mineo@sfc.wide.ad.jp

mine を m-sakura@ccs.mt.nec.co.jp に強制的に展開するには、以下のように します。

To: mine@`TAB'

<フォルダ名の補完>

Fcc: などのようにフォルダを補完すべきところでは、`TAB' でフォルダを 補完できます。以下例を挙げてみます。

Fcc: `TAB'

"+" が補完されます。

Fcc: +`TAB'

`TAB'をもう1度押すと候補が表示されるので、候補を見ながら適切な文字 を入力します。

Fcc: +B`TAB'

候補が一意に定まれば補完されます。

Fcc: +Backup

<設定のヒント>

アドレスの別名とフォルダ名をどのフィールドで補完できるようにするかは、 `mew-field-completion-switch' で定義できます。デフォルトでは以下の ように宣言されています。

(defvar mew-field-completion-switch
  '(("To:"       . mew-complete-address)
    ("Cc:"       . mew-complete-address)
    ("Dcc:"      . mew-complete-address)
    ("Bcc:"      . mew-complete-address)
    ("Reply-To:" . mew-complete-address)
    ("Fcc:"      . mew-complete-folder)
    ("Config:"   . mew-complete-config))
  "*Completion function alist concerned with the key."
  )

Config: の補完に関しては See section Config を参照して下さい。

ヘッダの循環的な補完

ヘッダでは、`C-cTAB' に循環的な補完機能が割り当てられています。循環 的な補完機能とは、あるリストのある値がそのリストの次の値に置き換えられる ことです。リストの最後は、最初につながっていると考えます。ヘッダ中の循環 的な補完機能は、以下のようにフィールドごとに異なります。

<ドメイン名の循環的な補完>

アドレスを書くべきフィールドでは、`C-cTAB' でドメインを補完します。 補完の候補は `mew-mail-domain-list' から選ばれます。

To: kazu@`C-cTAB'

上記の場所のように候補が一意に定まらない場合は、 `mew-mail-domain-list' の最初のドメイン名が挿入されます。

To: kazu@mew.org`C-cTAB'

補完された後、さらに `C-cTAB' を押すと `mew-mail-domain-list' の次の候補に変換します。

To: kazu@wide.ad.jp

また、以下の補完が一意に定まれば、その候補を挿入します。

To: kazu@w`C-cTAB'

上記の例は次のようになります。

To: kazu@wide.ad.jp

<From: の循環的な補完>

From: フィールド上では、`C-cTAB'`mew-from-list' の値を循環 的に補完します。このリストの最初の値(別名 `mew-from')は、次のように 既に挿入されているかもしれません。

From: Kazu Yamamoto (山本和彦) <Kazu@Mew.org>

値の場所ならどこでも構いませんが、`C-cTAB' と入力すると、 この値を `mew-from-list' の次の値と置き換えます。たとえば、

From: Kazu Yamamoto (山本和彦) <Kazu@Mew.org>`C-cTAB'

は以下のようになります。

From: Kazuhiko Yamamoto <kazu@wide.ad.jp>

循環的な補完のフィールドと関数の対応は、 `mew-field-circular-completion-switch' で定義できます。デフォルトで は以下のように宣言されています。

(defvar mew-field-circular-completion-switch
  '(("To:"       . mew-circular-complete-domain)
    ("Cc:"       . mew-circular-complete-domain)
    ("Dcc:"      . mew-circular-complete-domain)
    ("Bcc:"      . mew-circular-complete-domain)
    ("Reply-To:" . mew-circular-complete-domain)
    ("From:"     . mew-circular-complete-from)
    ("Config:"   . mew-circular-complete-config))
  "*Circular completion function alist concerned with the key."
  )

Config: の循環的な補完に関しては See section Config を参照して下さい。

メッセージの送信

草稿を書き上げ送信する準備ができたら、`C-cC-m C-cC-c' と入力して下 さい。

たとえば、以下のようなメッセージを送る場合を考えます。

To: mine
Subject: PGP/MIME を使おうよ
X-Mailer: Mew version 1.93 on XEmacs 20.4
Mime-Version: 1.0
----
Mew がセキュリティ・マルチパートをサポートしました。

--かず

`C-cC-m' まで入力すると、以下のようになります。

To: mine
Subject: PGP/MIME を使おうよ
X-Mailer: Mew version 1.93 on XEmacs 20.4
Mime-Version: 1.0
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit

Mew がセキュリティ・マルチパートをサポートしました。

--かず

ここで注意して頂きたいのは、Content-Type: に Text/Plain を選び、charset を推測していることです。

次に `C-cC-c' と入力すると通常のテキストメッセージを送れます。メッ セージはバックグランドで送信されます。このように `C-cC-m' は MIME の作成、`C-cC-c' は送信です。Mew では「できるだけ見たままのメッセー ジを送信する」というポリシーがあるので、ユーザに明示的に MIME を作っても らうことにしています(今までに余分な .signature や Fcc: が勝手に付けられ ていやな思いをした人はいませんか? :p)。

エラーが起きた場合は、"*Mew watch*" バッファを表示します。エラーが生じて 消えなかった "*Mew watch*" バッファは、`C-cC-q' で消せます。多くの 場合、草稿は +draft フォルダに残っています。そこで、Summary モードで `g' と押して +draft フォルダに移動し、+draft フォルダの Summary モー ドで `E' を押して再編集して下さい。

メッセージの送信が終っていないのに、`C-xC-c' で Emacs を終了させよ うとすると、

Active processes exist; kill them and exit anyway? (yes or no)

と訊かれます。"*Mew watch*" バッファがなくなってから終了させて下さい。

`C-cC-m' は省略できます。この場合、MIMEを自動的に作った後に

Content-Type: was automatically added. Send this message? (y or n)

と訊いてきますので、`y' を入力して下さい。Mewでは、見たままのメッセー ジを送信することをモットーにしているので、Mew が勝手にメッセージを書き換 えた場合は、このように質問を受けます。

全てのメッセージ作成方法で `C-cC-m' を省略して構いません。ただし、 見たままのメッセージを送信したい人は、`C-cC-m C-cC-c' と入力する癖 を付けることをお勧めします。

カーソルのある場所に "~/.signature" を挿入するコマンドは `C-cTAB' です。シグニチャファイルは、`mew-signature-file' で設定できます。 `mew-signature-as-lastpart'`mew-signature-insert-last' を 設定することで、`C-cTAB' の動作をカスタマイズできます。

もし、アドレスの alias がどう展開されるか一度に知りたい場合は、 `C-cC-w' と入力して下さい。

出てきたコマンドを以下にまとめます。

`C-cC-m'
MIME を作成する。Charset の推測、ファイル構造をマルチパートへ変換など。
`C-cC-c'
メッセージを送信する。
`C-uC-cC-c'
メッセージを送信するが、草稿は消さない。 複数の人に内容を少しずつ変えながらメールを送りたい場合に便利。
`C-cTAB'
カーソルの位置に "~/.signature" を挿入する。
`C-cC-w'
アドレスの alias を展開し、別のウインドウに表示する。

引用

Summary モードの `a'`A' を使ってメッセージに返答するための 草稿を用意すると、Emacs が3分割されます。上が現在の Summary モード、中が Message モード、下が Draft モードです。

Message モードのテキストを引用するコマンドを以下に示します。

`C-cC-y'
Message モードからメッセージの一部をコピーし、引用ラベルと引用記号付でペー ストする。
  1. おおまかに言えば、Message モードの本文がコピーされる。たとえば、 Text/Plain が表示されていると、Message モード全体がコピーされる。 Message/Rfc822 が表示されている場合は、ヘッダを除いた本文がコピーされる。
  2. `C-u' と共に呼ばれると、ヘッダがあればヘッダをコピーする。
  3. Emacs のマークがあると、そのマークとカーソルの間が対象となる。
`C-cC-t'
Message モードからメッセージの一部をコピーし、引用ラベルと引用記号なしで ペーストする。

デフォルトの引用ラベルと引用記号は以下のようになります。

From: SUMIKAWA Munechika <sumikawa@ebina.hitachi.co.jp>
Subject: Wine
Date: Wed, 23 Jul 1997 11:40:50 +0900

> おはようからおやすみまでニートでおなじみの角川です。
> 
> さて、とろけるワイン作戦ですが、定石通り '90 のボルドーの
> カベルネ・ソービニョンを狙いたいと思います。ピノノアール
> がちょっぴりブレンドしてあるといいかも。

Draft モードでは Message モード("*mew message*"バッファ)に表示されている ものならなんでも引用できます。つまり、複数のメッセージを簡単に引用できる のです。引用したいメッセージを表示させて、本文を引用する手順を、引用した いメッセージの回数だけ繰り返して下さい。そのための3分割です。

Mew は supercite とリンクできますが、supercite は `C-cC-m' を奪って しまうことがあります。適宜修正して下さい。mew.dot.emacs に入っているよう に設定すれば、以下のような引用が可能なので、supercite は不要かもしれませ ん。詳しくは See section 上級 を参照して下さい。

From: SUMIKAWA Munechika <sumikawa@ebina.hitachi.co.jp>
Subject: Wine
Date: Wed, 23 Jul 1997 11:40:50 +0900

sumikawa> おはようからおやすみまでニートでおなじみの角川です。
sumikawa> 
sumikawa> さて、とろけるワイン作戦ですが、定石通り '89 のボルドーの
sumikawa> カベルネ・ソービニョンを狙いたいと思います。ピノノアール
sumikawa> がちょっぴりブレンドしてあるといいかも。

もし、引用の様式が上記ではなく以下のようになるなら、 `mail-citation-hook' が定義されているのかもしれません。

In article .....

Mew 独自の引用様式を使いたいなら、以下の行を ".emacs" に加えて下さい。

(setq mail-citation-hook nil)

マルチパートの作成

さて、ここでマルチパートの作り方を披露しましょう。

たとえば、+draft/1 でメッセージを書いているときに、`C-cC-a' と入力 すると、草稿の一番下に

----------------------------- attachments -----------------------------
      Multipart/Mixed                                         1/     
     1  Text/Plain(guess)                                       CoverPage*
     2                                                          .   
--------0-1-2-3-4-5-6-7-8-9--------------------------------------------

という行が挿入されます。"1/" はマルチパートを構築するための一時的なディ レクトリで、実体は "~/Mail/draft/mime/1" です。パート1の CoverPage は本 文を意味します。ここで Draft モードは次のようになっているでしょう。

To: mew-dist
Subject: ここがヘッダ
X-Mailer: Mew version 1.93 on XEmacs 20.4
Mime-Version: 1.0
----
本文だよ。

----------------------------- attachments -----------------------------
      Multipart/Mixed                                         1/     
     1  Text/Plain(guess)                                       CoverPage*
     2                                                          .   
--------0-1-2-3-4-5-6-7-8-9--------------------------------------------

3つの領域を以下のように呼ぶことにします。

Draft モードでは、リージョンによってキー割当が違います。

たとえば、`TAB' は以下のようになります。

ヘッダ
さまざまな補完。
本文
TAB の挿入。
添付領域
なにもしない。

`c' だと以下のようになります。

ヘッダ
c を挿入。
本文
c を挿入。
添付領域
ファイルのコピー。

以下、添付領域でのキー割当です。

`C-p'
現在のディレクトリの前のファイルへ移動。
`C-n'
現在のディレクトリの後のファイルへ移動。
`C-f'
1番目のサブディレクトリに移動。
`C-b'
親ディレクトリに移動。
`c'
ファイルのコピー。"." 上で有効。ネットワーク経由でも可。リモートのファイ ルをコピーする場合は、"/[user@]hostname:/filepath"の形式でファイルを指 定。
`l'
ファイルへシンボッリクリンクを張る。"." 上で有効。
`d'
ファイルとディレクトリの消去。
`m'
サブディレクトリ(つまりマルチパート)の作成。"." 上で有効。
`f'
ファイルをバッファに読み込む。
`F'
新規ファイルをバッファに読み込む。"." 上で有効。
`e'
external-body の入力。"." 上で有効。
`a'
音をサンプリングしオーディオファイルとして挿入。"." 上で有効。
`p'
入力されたユーザの PGP 公開鍵を取り出す。"." 上で有効。
`D'
ちょっとした説明(Content-Description:)の入力。
`T'
データ型(Content-Type:)の変更。
`C'
Text/* 型のデータの charset を指定する。
`P'
受信側でこのパートを保存する際のファイル名(Content-Disposition:)の変更。 ファイル名の入力の際に、単に `RET'を押すと値が消える。そして、送信 側のファイル名が `*' と共に表示される。

添付領域では、ファイルのサフィックスによってデータを取り扱います。現在サ ポートしているサフィックスは以下の通りです。

.txt       Text/Plain
.html      Text/Html
.rfc822    Message/Rfc822
[0-9]+     Message/Rfc822
.ext       Message/External-body
.ps        Application/PostScript
.tar       Application/Octet-stream ;; dummy
.gif       Image/Gif
.jpg       Image/Jpeg
.jpeg      Image/Jpeg
.png       Image/Png
.xwd       Image/X-xwd
.xbm       Image/X-xbm
.bmp       Image/X-bmp
.au        Audio/Basic
.mpg       Video/Mpeg
.mpeg      Video/Mpeg
.pgp       Application/Octet-Stream
.pka       Application/Pgp-keys
.*         Text/Plain

`c' でファイルをコピーすると、たとえば次のようになります。コピーす るときのファイル名は、適切なデータ型を推測できるようサフィックスに気を付 ければなんでもよいです。

----------------------------- attachments -----------------------------
      Multipart/Mixed                                         1/     
     1  Text/Plain(guess)                                       CoverPage*
B    2  Image/Gif                    MagicPoint のロゴ          mgp.gif
Q    3  Application/Postscript       資料                       ohp.ps
     4                                                          .
--------0-1-2-3-4-5-6-7-8-9--------------------------------------------

各行は、 マーク、パート番号、データの型、説明、ファイル名
から構成されています。マーク、データの型、説明、ファイル名はそれぞれ、 Content-Transfer-Encoding:、Content-Type:、Content-Description:、 Content-Disposition: の値になります。

マーク(Content-Transfer-Encoding:)を変更する方法は、See section マークを使った PGP/MIME の作成 を参照して下さい。データの型(Content-Type:)は `T' によって変えられ ます。説明(Content-Description:)は `D' で入力できます。この説明のカ ラムは、See section マークを使った PGP/MIME の作成 で説明する暗号化の際に上書きされます。

第5カラムに表示されるのは、実際にはコピーしたファイル名か Content-Disposition:、つまり、受信者がそのパートを保存する際のファイル名 です。Content-Disposition: の値があれば、それが表示されます。なければ、 コピーしたファイル名に `*' を付加して表示します。ファイルをコピーし た際の Content-Disposition: の値は、コピーしたファイル名が指定されていま す。ただし、Message/* と Multipart/* には Content-Disposition: は設定さ れません。Content-Disposition: を指定するには、`P' を利用して下さい。

ファイルはシングルパートに、ディレクトリはマルチパートに対応します。で すから、ファイル構造を作っていく感覚で複雑なマルチパートを作成できます。 簡単でしょ?

ディレクトリのデフォルトの Content-Type: は Multipart/Mixed です。これも `T' によって変更できます。

さて、お好みのマルチパートが作成できたら、`C-cC-m' とタイプしましょ う。あーーーら不思議。ファイル構造がマルチパートへ変換されるではありませ んか。むろん、多段のマルチパートもサポートしています。あとは、 `C-cC-c' で送るだけです。

MIME の文法が分かっていない人は、`C-cC-m' の後に草稿を変更しないよ うにしましょう。もし、どうしても草稿を修正するときは、「最初の境界の前と 最後の境界の後は無視される」ことに注意して下さい。

マルチパートの変換後、やっぱり元に戻したいと思ったら、`C-cC-u' を使っ て下さい。たとえば、次に述べる PGP/MIME を作っている最中で、パスフレーズ を3回入力に失敗したら、間違った MIME メッセージが作られてしまいます。こ ういうときには、`C-cC-u' が役に立ちます。

パートの実体が外部にある external-body を作成するコマンド`e' につい て説明しましょう。access-type に ftp か anon-ftp を入力するときは、 ange-ftp のおかげでリモートのファイル名が補完できます。access-type が local-file の場合は、もちろんファイル名を補完できます。

もし、マルチパートの作成途中でやっぱりシングルパートに戻したくなったら、 一番上のマルチパート部分で `d' を押して下さい。

文字コードの推測

Mew はシングルパートとマルチパートの両方に対し、charset を推測する機能を 持っています。

<シングルパート>

Draft モードで `C-cC-m' と入力すると、Mew は本文の charset を推測し ます。Bilingual Emacs では、7ビットの文字コードに対し US-ASCII を選び、8 ビットの文字コードに対し ISO-8859-1 を選択します。Mule では、Mule で定め られた文字コードの内部表現から charset を推測します。

<マルチパート>

テキストファイルを添付領域に添付した際には、以下のように "(guess)" と表 示されます。

----------------------------- attachments -----------------------------
      Multipart/Mixed                                         1/
     1  Text/Plain(guess)                                       CoverPage*
     2  Text/Plain(guess)                                       textfile
     3                                                          .
--------0-1-2-3-4-5-6-7-8-9--------------------------------------------

シングルパートとマルチパートで charset を推測することの違いは、データが どこに存在するかです。シングルパートはバッファに格納されていますが、マル チパートのそれぞれのファイルはディスク上に存在します。charset を推測する ためには、Mew はこれらのファイルをバッファに読み込み、そしてシングルパー トと同じ要領で文字コードを推測します。

Bilingual Emacs では、Mew はファイルをそのままの形式で読み込みます。です から、7ビットのファイルには US-ASCII が、8ビットのファイルには ISO-8859-1 が選ばれます。

Mule では、Mew はファイルをそのサイトの環境(つまり、auto conversion)に従っ てファイルを読み込みます。この環境はサイトごとによって異なります。日本語 の環境では、Mule は 2022-JP、EUC-Japan、そして、Shift_JIS を見事に推測し、 日本語用の内部表記に変換してバッファに格納します。Mew は、この内部表記か ら charset を推測します。よって、ISO-2022-JP、EUC-Japan、そして、 Shift_JIS のファイルを安全に添付できます。Mule でこの環境を決定する関数 は、set[up]-<language>-environment という名前ですから、詳しいことが知り たいならこれらの関数の説明を読んで下さい。

もし、ファイルの charset を明示的に指定したいなら、`C' を使って下さ い。典型的な使用例は、日本で ISO-8859-1 のファイルを添付することです。こ の例の場合、添付領域は以下のようになります。

----------------------------- attachments -----------------------------
      Multipart/Mixed                                         1/     
     1  Text/Plain(guess)                                       CoverPage*
     2  Text/Plain(iso-8859-1)                                  textfile
     3                                                          .    
--------0-1-2-3-4-5-6-7-8-9--------------------------------------------

Bilingual Emacs では `C' は利用できません。

PGP を利用する

ここでは、テキストである本文を PGP で署名したり暗号化したりする方法につ いて説明します。出てくるコマンドは以下の通りです。

`C-cC-s'
シングルパートの草稿を PGP で署名する。パスフレーズを入力すること。
`C-cC-e'
シングルパートの草稿を PGP で暗号化する。
`C-cC-b'
シングルパートの草稿を PGP で署名後暗号化する。パスフレーズを入力すること。

これらは、以下で説明するマークを使った PGP/MIME の作成方法の省略方法にあ たります。

もし、Mew で PGP を使うなら、PGP の userid として電子メールアドレスを選 ぶ必要があります(例 "Kazuhiko Yamamoto <kazu@mew.org>")。

以降の説明では、次の例を取り上げます。

To: mine
Subject: PGP/MIME を使おうよ
X-Mailer: Mew version 1.93 on XEmacs 20.4
Mime-Version: 1.0
----
Mew がセキュリティ・マルチパートをサポートしました。

--かず

署名するには、`C-cC-s' とタイプし、自分のパスフレーズを入力します。

******************************************************************** もし Emacs がローカルのコンピュータで動いていない場合は、パスフレー ズを入力しないで下さい。入力すると盗聴される恐れがあります。 ********************************************************************

パスフレーズを入力すると、次のメッセージが得られます。

To: mine
Subject: PGP/MIME を使おうよ
X-Mailer: Mew version 1.93 on XEmacs 20.4
Mime-Version: 1.0
Content-Type: Multipart/Signed;
        protocol="application/pgp-signature";
        micalg="pgp-md5";
        boundary="--Security_Multipart(Sat_Nov_16_03:55:00_1996)--"
Content-Transfer-Encoding: 7bit

----Security_Multipart(Sat_Nov_16_03:55:00_1996)--
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit

Mew がセキュリティ・マルチパートをサポートしました。

--かず

----Security_Multipart(Sat_Nov_16_03:55:00_1996)--
Content-Type: Application/Pgp-Signature
Content-Transfer-Encoding: 7bit

-----BEGIN PGP MESSAGE-----
Version: 2.6.3i

iQCVAwUAMoy8ig9kihyeT3RNAQHt7AQAySDg4n8pOp/YuLaAp68Un/YDtWS0FnOC
7EqHJd6fyViPBnZq8d+uGikA7kOBTz+8Kcv+hN6I7BrQVJGEzd0Y9yHHhXvZj++1
0D09vgWL5G/Zfk/JMnLBt/BZ1ppOhJPT/L5qi2abk+mBVMKxQe071lfFEfvjF1C2
8trTXm/bBz4=
=TvAG
-----END PGP MESSAGE-----

----Security_Multipart(Sat_Nov_16_03:55:00_1996)----

`C-cC-c' で送信して下さい。

暗号化するには、`C-cC-e' と入力して下さい。(パスフレーズなしで)次の ようになります。

To: mine
Subject: PGP/MIME を使おうよ
X-Mailer: Mew version 1.93 on XEmacs 20.4
Mime-Version: 1.0
Content-Type: Multipart/Encrypted;
        protocol="application/pgp-encrypted";
        boundary="--Security_Multipart(Sat_Nov_16_03:57:47_1996)--"
Content-Transfer-Encoding: 7bit

----Security_Multipart(Sat_Nov_16_03:57:47_1996)--
Content-Type: Application/Pgp-Encrypted
Content-Transfer-Encoding: 7bit

Version: 1

----Security_Multipart(Sat_Nov_16_03:57:47_1996)--
Content-Type: Application/Octet-Stream
Content-Transfer-Encoding: 7bit

-----BEGIN PGP MESSAGE-----
Version: 2.6.3i

hIwDD2SKHJ5PdE0BA/9gUkcQYVfT+3LrUmcgLkNepuOnDfjADHrWiNo10t4ijyf8
ODBpUBXoBdTg08eNLAWmRFhiJPmI+mxpF6cYFZXhr7gVpa0Qzp3Gr9nYvngRPKNK
qUiQjA/ORR3c1TBawufB19jJ9RdU2f0BidhzOSbzsJh1LTgUZu/7Qyd02LxyEqYA
AACbrV867PeoFyFc9MVfqTUR6Zw6kGBAlnVYjqQgBhuuyG79vbAbDJMhFiRpoRPf
0MqEewxRonwKOik/PoKnLrwFg77Cb5pxRqMiWPyECJnqtX7r7Wg1c8kqPD0VRjI9
GhHPiG/RmNbpbj/5g6zZri1YBCe8qxIS0QKa3YO7HRDcdBFARr22RaFGFtgdBQ6X
cZB+qNeEaKXt3AneTWc=
=djCr
-----END PGP MESSAGE-----

----Security_Multipart(Sat_Nov_16_03:57:47_1996)----

`C-cC-c' で送信して下さい。このメッセージは、受信者の公開鍵に加えて、 自分の公開鍵でも暗号化されています。ですから、保存したメッセージを復号化 できます(例 `g' で +Backup に移動したとき)。

署名後暗号化するには、`C-cC-b' とタイプ後、パスフレーズを入力します。 `C-cC-c' で送信して下さい。このメッセージは、受信者の公開鍵に加えて、 自分の公開鍵でも暗号化されています。ですから、保存したメッセージを復号化 できます(例 `g' で +Backup に移動したとき)。

3回パスフレーズの入力に失敗すると Draft モードがおかしくなりますが、 `C-cC-u' で元に戻ります。

マークを使った PGP/MIME の作成

PGP/MIME をサポートするために、マークを使った作成方法が提供されています。 以前の例を思い出してみましょう。

----------------------------- attachments -----------------------------
      Multipart/Mixed                                         1/     
     1  Text/Plain(guess)                                       CoverPage*
B    2  Image/Gif                    MagicPoint のロゴ          mgp.gif
Q    3  Application/Postscript       資料                       ohp.ps
     4                                                          . 
--------0-1-2-3-4-5-6-7-8-9--------------------------------------------

行頭に `B'`Q' といったマークがあります。このマークは符号化 を意味しています。Mew では、新しい概念「符号化」を導入しています。符号化 には、Base64, Quoted-Printable, Gzip64(Gzip + Base64), PGP で署名, PGPで 暗号化などがあります。

現在次の 6 つのマークがサポートされています。

`" "'
符号化しない。ただし、8ビットのテキストは符号化されるかもしれない。
`B'
Base64
`Q'
Quoted-Printable
`G'
Gzip64(gzip 圧縮し Base64 で符号化する。Mew が実験的に採用している。相手 が Mew を使っていない場合は、使用すべきではない。)
`PS'
PGP で電子署名。
`PE'
PGP で暗号化。

添付領域でのマークに関係する新しいキー割当は以下の通りです。

`B'
Base64 で符号化するため `B' マークを付ける。
`Q'
Quoted-Printable で符号化するため `Q' マークを付ける。
`G'
Gzip64 で符号化するため `G' マークを付ける。ただし、Text/Plain と Application/Postscript でしか実行できない。これ以外の型には圧縮は無意味 である。なぜなら、jpeg などはあらかじめ圧縮されているから。
`S'
PGP で署名するため `PS' マークを付ける。
`E'
PGP で暗号化するため `PE' マークを付ける。受信者のアドレスを入力す る。
`U'
符号化を元に戻す。もともとのマークに戻る。

次の例を考えてみましょう。パート2は PGP で署名され、"kazu" 用に PGP で暗 号化されます。安心して下さい。説明の部分は上書きされていますが、保存され ています。パート3は Gzip64 で符号化されます。

----------------------------- attachments -----------------------------
      Multipart/Mixed                                         1/
     1  Text/Plain(guess)                                       CoverPage*
PSPE 2  Image/Gif                    kazu@mew.org               mgp.gif
G    3  Application/Postscript       資料                       ohp.ps
     4                                                          .
--------0-1-2-3-4-5-6-7-8-9--------------------------------------------

適宜マークを付けた後は、`C-cC-m' で MIME(PGP/MIMEなど) を作成し、 `C-cC-c' で送信して下さい。

3回パスフレーズの入力に失敗すると Draft モードがおかしくなりますが、 `C-cC-u' で元に戻ります。

PGP の鍵の配布

PGP の公開鍵を配布するには、Draft モードの添付領域で `p' を押して下 さい。だれの公開鍵を配布するか尋ねられます。自分の公開鍵であれば、単に `RET' と入力して下さい。他人の公開鍵であれば、補完を利用しながらそ の人のアドレスを入力して下さい。PGP の公開鍵は、Application/Pgp-keys と いうデータ型で配送されます。

Summary モード、あるいは、Virtual モードでメッセージを読んでいる際に、あ るパートのデータ型が Application/Pgp-keys であれば、Mew は PGP の公開鍵 リングにそれを登録しようとします。Mew は、「信用度」と「有効性」を全く考 慮しないことに注意して下さい。これらの値を設定するのは、あなた自身です。 設定には、"pgp -ke" と "pgp -ks" を使って下さい。もし、「信用度」と「有 効性」の意味が分からなければ、PGP を使って自分のプライバシを保護しようと する前に、PGP が提供する「信用の輪」とは何かを学ぶべきです。

愉快なマークたち

ここでは、Summary モードで利用できるマークについて説明します。マークは以 下のように、数字の右に付きます。

    1D 07/17 いとぢゅん     v6: items to be no in6_pcbnotify()がなにも
    2o 07/18 歌代先生       Re: behavior after これ、mark-ring がどんど
    3* 07/19 のむさん       refile info.       乃村です。遅くなりました。

現在利用できるマークは以下の4つです。

`D'
消去のマーク。
`o'
整頓、つまり、フォルダを移動させるマーク。
`@'
複数のメッセージを一度に扱うためのマーク。
`*'
後から読み返すためのマーク。

以下それぞれについて説明します。

消去 `D'

メッセージを消去するには、まず Summary モードで `d' を押して、 `D' マークを付けます。マークを付けただけでは何も起こらないので、間 違って `d' を押しても大丈夫です。デフォルトでは、`x' を押すと `D' マークの付いたメッセージが +trash フォルダに移動します。

+trash フォルダ内のメッセージを実際に消去するには、デフォルトでは以下の 2 つの方法があります。

  1. コマンドラインで `imclean' を実行する。
  2. +trash フォルダ内で `D' マークを付けて、`x' を押す。

これまでしつこいように「デフォルトでは」と念を押してきました。ここでいう デフォルトとは、`mew-msg-rm-policy'`'trashonly' であるとい うことです。`mew-msg-rm-policy' は以下のような値をとれます。それぞ れの説明は `x' を押した際の動作についてです。

`'totrash'
+trash フォルダ以外のフォルダでは、`D'マークの付いたメッセージが +trash フォルダに移動します。+trash フォルダでは単にマークが消えます。
`'always'
`D' マークの付いたメッセージは実際に消去されます。
`'trashonly'
+trash フォルダの `D' マークの付いたメッセージは、実際に消去されま す。それ以外のフォルダにある `D' マークの付いたメッセージは、+trash フォルダに移動します。
`'uselist'
`mew-msg-rm-folder-list' で指定されたフォルダの `D' マークの付 いたメッセージは、実際に消去されます。それ以外のフォルダにある `D' マークの付いたメッセージは、+trash フォルダに移動します。
`それ以外'
`'totrash' と同様に扱われます。

自分の好きなように `x' の動作をカスタマイズして下さい。

全ての `*' マークを `D' に変換できれば、一度にたくさんの `D' マークを付けれて便利です。これには、`md' を利用して下さい。

以下に、`D' マークに関するコマンドをまとめます。

`d'
`D' マークを付ける。
`x'
`D' マークの付いたメッセージを `mew-msg-rm-policy' に従って処 理する。
`md'
`*' マーク全てを `D'マークに変換する。

整頓 `o'

メッセージを整頓するには `o' を押して、整頓先のフォルダを入力し、 `o' マークを付けます。整頓先のフォルダは、賢く推測してくれるので、 ほどんどの場合はフォルダ名を入力する代わりに `RET' を押すだけです。 "," で区切って複数のフォルダを入力することもできます。もちろん、 `TAB' で補完できます。詳しくは See section 楽々整理整頓 を参照して下さい。

`o' マークの付いたメッセージの上で `o' を押すと、整頓先を追加 したり変更したりできます。また、実際の整頓は `x' と入力されたときに 実行されます。

以下に、`o' マークに関するコマンドをまとめます。

`o'
`o' マークを付ける。
`x'
`o' マークの付いたメッセージを整頓する。
`mo'
`*' マークの付いたメッセージに対し入力されたフォルダへ整頓するため の `o' マークを付ける。

複数 `@'

複数のメッセージを一度に取り扱うためには、`@' マークを付けます。 `@' マークが付いた単数/複数のメッセージを取り扱うコマンドは以下の 通りです。

`@'
`@' マークを付ける。
`F'
`@' マークの付いたメッセージを MIME 形式で転送するための草稿を準備。
`M-s'
`@' マークの付いたメッセージを "unshar" の入力として渡す。つまり、 shar (の後に split)されたデータを取り出す。
`M-t'
`@' マークの付いたメッセージを "uumerge" の入力として渡す。つまり、 uuencode(の後に split)されたデータを取り出す。

`M-s'`M-t' では、`@' マークの付いたメッセージの番号 がきちんと分割順になっている必要があります(番号はとびとびでも構いません)。 ちゃんと順番になってないなら、`S' でソートするとよいかもしれません。

復習 `*'

後から読み返したいメッセージには、`*'`*' マークを付けて下 さい。また、選択コマンド `?' を使うと、入力した条件にマッチするメッ セージに`*' マークが付きます(詳しくは、See section お目当てのメッセージを選択するには を参照して下さい)。 `N'`P'`*' マークの付いたメッセージに移動し表示で きます。

以下に、`*' に関連するコマンドを示します。

`*'
`*' マークを付ける。
`N'
下方向の `*' マークの付いたメッセージへ移動し表示。
`P'
上方向の `*' マークの付いたメッセージへ移動し表示。
`ma'
マークの付いていないメッセージ全てに `*' マークを付ける。
`mr'
入力した正規表現にマッチしたメッセージに `*' マークを付ける。
`md'
`*' マークを `D' マークに変換。選択コマンド `?' で選んだ メッセージを消去するときに便利です。
`mo'
`*' マークを `o' マークに変換。選択コマンド `?' で選んだ メッセージをあるフォルダに整頓する場合に便利です。

マークの消去

`o' マークや `D' マークが付いたメッセージは、マーク実行コマン ド `x' を押さない限り処理されません。よって、`x' を押す前に、 マークを取り止めるコマンド `u' でマークを消せば、誤ってメッセージを 消すことはありません。

以下にマークを消去するコマンドをまとめます。

`u'
現在のメッセージのマークを消す。
`U'
入力したマークが付いている全てのメッセージのマークを消す。

マークの強さ

マークには「強いマーク」と「弱いマーク」があります。同じレベルのマークは 上書きできます。強いマークは弱いマークを上書きできます。

マークを付けた際の動作は、以下の通りです。

強いマーク :: `o'`D'
新たにマークしたときは、次のメッセージを表示。上書きした場合は、その行に 留まる。
弱いマーク :: `*'`@'
常にその行に留まる。

マークは以下のように交換できます。

`m@'
`*' -> `@' :: 選択コマンド `?' で選び、"uumerge" を起動 するコマンド `M-t' を利用する場合に便利です。
`m*'
`@' -> `*'
`ms'
`@' <-> `*'
`md'
`*' -> `D' :: 選択コマンド `?' で選んだメッセージを消去すると きに便利です。
`mo'
`*' -> `o' :: 選択コマンド `?' で選んだメッセージをあるフォル ダに整頓する場合に便利です。

楽々整理整頓

1日に数百のメッセージを受け取るようになると(え、そんなに受け取らないですっ て?幸せですね。:) 整理整頓が大変になります。Mew では、`o' でメッセー ジを整頓する際に、整頓先を推測しデフォルト値として表示してくれます。たと えば、次のようになります。

Folder name (+work/mew-dist): +

もし、() のなかのデフォルト値が自分の希望通りであれば、`RET' を押す だけでよいのです。整頓先が決定しているメッセージには、`o' マークが 付きます。

この整頓先の推測が賢ければ賢い程ユーザは楽になります。Mew では以下のよう なルールが用意されています。

フォルダ名から推測

ヘッダの情報を見ただけでは、整頓先となるフォルダの候補は無限です。よって、 なんら手がかりのない状態で、メッセージから整頓先を決定するのは無理な話で す。しかし、フォルダの数には限りありますから、この中から整頓先を選び出す ことはそんなに難しいことではありません。

たとえば、+work/happy-networking というフォルダがあったとしましょう。次 のようなメッセージは、このフォルダに整頓すればよい可能性が高いといえます。

To: happy-networking@mew.org 

このように、To: や Cc: のアドレスが、フォルダ名の一番右側にマッチするも のがないか探すわけです。フォルダを階層化していない人が多いようですが、 Mew を使う限り、階層化しない手はありません。

さて、鋭い人は次の様なときに困るのではないかと思うでしょう。

To: simozono
Cc: happy-networking@mew.org

kazu は happy-networking の一員ですから、このメッセージが届きます。しか し、simozono さんと仲がいいので ~/Mail の下の +simozono にマッチしてしま います。

そこで、Mew では無視するフォルダを設定できるようになっています。デフォル トでは、"~/Mail/from" 以下を無視します。ですから、個人からのメッセージは "~/Mail/from" に収めて下さい

候補が決定できたら

Folder name (+work/happy-networking): +

と訊いてきます。あっていれば `RET' を、違っていればお望みのフォルダ を入力して下さい。

`o' で新しいフォルダを指定すると、そのフォルダが自動的に作成され、 次からは推測用の候補にも加わります。便利でしょ?

この機能を提供する関数は `mew-refile-guess-by-folder' です。

指定したルールから推測

フォルダ名から推測する機能だけでは、思うようなフォルダを推測してくれない 場合があります。たとえば、

To: staff@mew.org

To: staff@iijlab.net

は、フォルダ名からの推測では同じフォルダ(たとえば、"+net/staff")が選ばれ てしまいます。そこで、Mew では、変数 `mew-refile-guess-alist' に明 示的にルールを設定できます。

1つ例を挙げてみましょう。

(setq  mew-refile-guess-alist
  '(("To:"
      ("staff@mew.org" . "+net/mew/staff")
      ("staff@iijlab.net" . "+net/iijlab/staff")
     )))

これは、メッセージヘッダ中の To: の横の文字列に staff@mew.org があれば +net/mew/staff へ、staff@iijlab.net があれば +net/iijlab/staff へ整頓す るという意味です。

ルールは、以下のように書きます。

rule ::= '((<key> <alist>) (<key> <alist>) (<key> <alist>) ...)

全体は (<key> <alist>) のリストです。<key> はフィールド名を書きます。 <alist> は以下のようになります。

<alist> ::= (<value> . <folder>|<rule>) (<value> . <folder>|<rule>) ...

<value> は <key> で示したフィールドにくる値です。<folder> は <key> にマッ チした際にどのフォルダに整頓するかを意味しています。<value> と <folder> を `.' で区切るのを忘れないで下さい。<folder> の代りに <rule> を再 帰的に記述することもできます。

特殊な <key> として `nil'`t' があります。`nil' は、何 も推測できなかった場合に返す <value> を指定するために用います。`t' は、推測した値に加えて返す <value> を指示するために使います。

正規表現を知っている人は、以下のような複雑なルールを設定できます。

(setq mew-refile-guess-alist
  '(("Newsgroups:"
    ("^nifty\\.\\([^ ]+\\)" . "+Nifty/\\1")
    (".*"         . "+rec/news"))
   ("To:"
    ("\\(inet\\|wide\\)@wnoc-fuk" . "+wide/\\1-wnoc-fuk"))
   ("From:" 
    ("uucp@"      . "+adm/uucp")
    ("ftpsync@"   . "+adm/ftpsync"))
   (nil . "+unknown")))

この機能を提供する関数は `mew-refile-guess-by-alist' です。

Message-ID から推測

In-Reply-To: フィールドの Message-Id をたどり、親のメッセージがかつてど こに整頓されたかによって推測する機能があります。

たとえば、Alice、Bob、Chris との間で、スキーに行こうという話題が盛り上がっ たので、+tmp/ski というフォルダを作って、そこに 整頓したとしましょう。以 降、3人の間のメッセージがきちんとした返答であるかぎり、+tmp/ski を推測し てくれるでしょう。

Message-Id とフォルダの情報は、"~/Mail/.mew-refile-msgid-alist" に保存さ れています。この情報を過去何通のメッセージに関して保存するかは、 `mew-refile-alist-max-length' で決定します。500通にしたい場合は "~/.emacs" 中で以下のように設定して下さい。

(setq mew-refile-alist-max-length 500)

この機能を提供する関数は `mew-refile-guess-by-msgid' です。

From: から推測

From: に同一のアドレスを持つメッセージが、かつてどこに整頓されたかによっ て推測する機能があります。

Alice がスキーのための宿の情報をメッセージしてきました。きちんとした返答 メッセージではないので、Message-ID からの推測からでは正しく推測できませ ん。しかし、+tmp/ski を選んで欲しいのが人情です。直前の彼女からのメッセー ジが +tmp/ski に整頓されていれば、正しく +tmp/ski を推測してくれるでしょ う。

その他、機械からくるメッセージは、いつも +adm/misc に入れることにしたい 場合なども、明示的なルールを書かずに済ませられます。

この機能を提供する関数は `mew-refile-guess-by-from' です。

`mew-refile-guess-by-from' は From: が自分のアドレスの場合も、From: から整頓先を推測します。この仕様を気に入らない人もいることでしょう。そこ で、`mew-refile-guess-by-from2' という関数が用意されています。 `mew-refile-guess-by-from2' は、From: が自分のアドレスの場合にのみ、 To: と Cc: にあるアドレスを From: に持つメッセージがかつてどこに整頓され たかによって整頓先を推測します。

`mew-refile-guess-by-from2' は自分が出したメッセージ、 `mew-refile-guess-by-from' は他人が出したメッセージを対象にするので、 必要であれば `mew-refile-guess-by-from2'`mew-refile-guess-by-from' の順で実行するのがよいでしょう。

Newsgroups: から推測

ネットニュースをメッセージで受けて Mew で読んでいる人のために、 Newsgroups: からフォルダを推測する機能を用意しました。将来 Mew がネット ニュースをサポートした場合にも有効でしょう。関数名は `mew-guess-by-newsgroups' です。

デフォルトの規則

デフォルトの規則は、From: からユーザ名を切り出して、 `+from/username' を選ぶようになっています。関数名は、 `mew-refile-guess-by-default' です。

ルールの制御

Mew では、フォルダ推測のルールを2つの変数、 `mew-refile-guess-control'`mew-refile-ctrl-multi' で制御し ます。`mew-refile-guess-control' は、呼び出す関数を順に定義します。 候補を複数にしたい場合は `mew-refile-ctrl-multi'`t' に、単 数にしたい場合は `nil' に設定します。

標準では、`mew-refile-guess-control' は以下のように宣言されています (宣言なので `defvar' が使われています)。

(defvar mew-refile-guess-control
  '(
    mew-refile-guess-by-alist
    mew-refile-guess-by-newsgroups
    mew-refile-guess-by-folder
    mew-refile-ctrl-throw
    mew-refile-ctrl-auto-boundary
    mew-refile-guess-by-msgid
    mew-refile-guess-by-from
    mew-refile-guess-by-default
    )
  )

Mew は `mew-refile-guess-control' に並べられた関数を順番に全て実行 します。各々の関数が複数の候補を推測することがあります。

`mew-refile-guess-control' の動作例として以下を考えてみましょう。

`mew-refile-guess-by-alist'
が +aaa, +bbb を推測。
`mew-refile-guess-by-folder'
が +ccc, +ddd を推測。
`mew-refile-guess-by-default'
が +eee を推測。

+aaa 〜 +eee 全てをユーザに提示して欲しい場合は、 `mew-refile-ctrl-multi'`t' に, +aaa だけを提示して欲しい場 合は、`nil' に設定します。

また、+aaa 〜 +ddd は提示して欲しいけれどもそれ以降はいらない、つまり、 +eee を提示するのは先に実行された関数群が何も推測できなかったときだけに したい場合は、`mew-refile-ctrl-multi'`t' にして、 `mew-refile-guess-by-folder'`mew-refile-guess-by-default' の間に `mew-refile-ctrl-throw' を入れて下さい。

自動で整理整頓

毎日メッセージをたくさんもらう人は、まだ整頓していないメッセージを +inbox フォルダに大量に溜めてしまうことがあります。そんなときは、「メッ セージ達よ、とにかく +inbox フォルダからどこかに行ってしまえ」と叫びたく なることがあるでしょう。Mew は、そんなわがままなを満足させるための自動整 理整頓関数を提供しています。:)

`M-x mew-summary-auto-refile' がその呪文です。あまりに恐しい呪文な ので、キーにはバインドされていません。この関数を実行すると、現在のフォル ダ内の `o'`D' マークが付いていないメッセージについて、自動 的に `o' マークを付けてくれます。整頓先の決定には、先に説明した推測 関数群が働くようになっています。この関数は、`o' を付けるだけですの で、`x' を押さない限り実際にメッセージがどこかに行ってしまうことは ありません。

Mew の整頓先推測はあまりにも賢すぎるので、この機能には仇となってしまいす。 というのは、Mew が推測機能をフルに使って勝手に整頓してしまうと、大抵のユー ザはどこにメッセージが整頓されたか分からなくなってしまうのからです。:) そのために、Mew が使う推測関数を制限する機能が提供されています。前に出て きた宣言をもう一度思い出して下さい。

(defvar mew-refile-guess-control
  '(
    mew-refile-guess-by-alist
    mew-refile-guess-by-newsgroups
    mew-refile-guess-by-folder
    mew-refile-ctrl-auto-boundary
    mew-refile-guess-by-msgid
    mew-refile-ctrl-throw
    mew-refile-guess-by-from
    mew-refile-guess-by-default
    )
  )

`mew-refile-guess-control' の中に `mew-refile-ctrl-auto-boundary' という関数があります。これがその仕 掛です。自動整理整頓のときに限り、Mew はこの関数より下に記述してある推測 を無視します。`mew-refile-ctrl-auto-boundary' より上に記述している 関数が何も推測できなかった場合は、そのメッセージには `o' が付きませ ん。破滅が訪れる前に `mew-refile-ctrl-auto-boundary' の御札を貼って 下さい。

お目当てのメッセージを選択するには

たとえば、Subject: に party という文字が含まれているメッセージを見つけ出 したり、From: が kazu@mew.org であるメッセージを選択したいと思うことが あります。このように、入力した条件にあるメッセージを見つけ出すコマンドを Mew は 3 つ提供しています。

`?'
入力した条件に合うメッセージに `*' マークを付ける。現在の Summary モードの一覧を利用する。`?' を押した後に、条件を入力して下さい。
`/'
入力した条件に合うメッセージを Summary モードに一覧表示する。現在の Summary モードの一覧は上書きされます。`/' を押した後に、フォルダ名 と条件を入力して下さい。
`V'
複数のフォルダから入力した条件に合うメッセージを見つけ出して Virtual モー ドに一覧表示する。操作は、See section Virtual モード を参照して下さい。

以下条件の入力方法と Virtual モードに付いて解説します。

条件の入力方法

Mew が条件の入力をユーザに促すときは以下のように訊いてきます。

pick pattern: 

以下に示すキーワードを組み合わせて条件を入力して下さい。

`field=string'
フィールド field に文字列 string が含まれているときマッチ。フィールド field が、head、body、および、all の場合は、それぞれヘッダ全体、本文、メッ セージ全体を意味します。
`<pattern1> & <pattern2>'
<pattern1> かつ <pattern2> のときマッチ。
`<pattern1> | <pattern2>'
<pattern1> または <pattern2> のときマッチ。
`! <pattern>'
<pattern> でないときマッチ。
`( <pattern> )'
<pattern> の内容を先に評価。

以下に例を示します。

(a) From: に kazu か含まれるメッセージ

from=kazu

(b) To: が mew、または、Cc: が mew であるメッセージ

to=mew | cc=mew

(c) To: が mew、または、Cc: が mew で、かつ、from が kazu である メッセージ

(to=mew | cc=mew) & from=kazu

後は類推して下さい。

Virtual モード

Virtual モードは、複数のフォルダから入力した条件に合うメッセージを選びだ し、単一の仮想的なフォルダとして扱います。Summary モードで `V' を押 すと、Virtual モードが作れます。

最初に、仮想フォルダ名を訊かれます。

Virtual folder name (virtual) : 

任意の文字列を入力して下さい。単に `RET' を押すと、"++virtual" にな ります。次に、単数または複数のフォルダ名を入力します。複数のフォルダを入 力する場合は、"," で区切って下さい。もちろん、`TAB' で補完できます。

Folder name (+inbox) : +inbox, +mew

そして、条件を入力します。

pick pattern: 

すると仮想フォルダができあがります。Virtual モードは、整頓や消去、検索な ど一部のコマンドを除いて、Summary モードと一緒です。仮想フォルダはまさし く仮想であり、ファイルシステムなどには存在しないことに注意して下さい。 Emacs を終了すると、仮想フォルダはなくなります。

一休み

Mew を終了させたり、一時中断させたり、そのモード(正確にはバッファ)を消去 する方法を以下に示します。

<Summary モードと Virtual モード>

`q'
Mew を一時中断し、他のバッファに切り替えます。Mew 用のバッファは全て残っ ていますから、バッファ操作で選べば再開できます。
`Q'
Mew を終了します。Mew が使った全てのバッファを消去します。
`C-cC-q'
そのモード(正確にはバッファ)を消去します。

<Draft モード>

`C-cC-q'
その草稿を消去します。

<"*Mew watch*" バッファ>

`C-cC-q'
そのバッファを消去します。

自分好みの Mew にするには

ここでは、Mew のデフォルトの動作を変更し、自分好みの Mew にする方法を説 明します。主に "~/.emacs" で設定して下さい。

初級

ここでは、以下の変数について説明します。

Draft モードでは、フックを `text-mode-hook'`mew-draft-mode-hook' の順で評価します。`text-mode-hook'`auto-fill-mode' の設定していない人は、 `mew-draft-mode-hook' を以下のように設定するのがよいかもしれません。

(setq mew-draft-mode-hook (function (lambda () (auto-fill-mode 1))))

電子メールの管理者が設定しているのとは違うアドレスで送信したいことがあり ます。たとえば、管理者の設定が甘く、不要なホスト名が付いてしまう場合など です(この場合は管理者に頼み設定を修正してもらうのが一番です)。Mew では草 稿のヘッダに From: アドレスがあれば、それがそのまま From: となります。補 完を使いながら書いて下さい。いつも草稿に From: を用意するには、以下の例 のように `mew-from' を指定して下さい。

(setq mew-from "Kazu Yamamoto (山本和彦) <Kazu@Mew.org>")

From: 行を自分で指定できるということは、簡単にだれかになりすませるという ことです。くれぐれもこの機能を使ったいたずらをしないで下さい。また、他人 も容易にだれかになりすませることに注意して下さい。大切な用件は、PGP/MIME で保護して送りましょう。

毎回 Fcc: でバックアップを取りたい人は、以下を .emacs に設定して下さい。

(setq mew-fcc "+Backup")

自分へ Cc:(Dcc:) したい人は `mew-cc'(`mew-dcc')を設定して下さ い。

いつも Emacs のフレーム全体で Mew を使いたい人は、以下の設定をして下さい。

(setq mew-window-use-full t)

Summary モードの `SPC' は、`mew-summary-show-direction' によっ て、次のメッセージの表示の仕方が変わります。以下の値を設定できます。

`up'
上のメッセージを表示する。
`down'
下のメッセージを表示する。
`next'
読み進めている方向の次のメッセージを表示する。
`stop'
次は表示しない。

デフォルトは `'next' です。いつもメッセージを下から読む人は、以下の ようにすればよいでしょう。

(setq mew-summary-show-direction 'up)

中級

ここでは、以下の変数について説明します。

`mew-use-highlight-cursor-line'`t' の場合、Summary モード でカーソルのある行に下線が引かれます。デフォルトは `t' です。

XEmacs では `mew-use-highlight-mouse-line'`t' の場合、 Summary モードでマウスのある行に色がつきます。真中のボタンをクリックしな がら、マウスだけでメッセージを読む際にはとても便利です。XEmacs でのデフォ ルトの値は、`t' になっています。

`mew-use-highlight-mark'`t' で、かつ、 `mew-highlight-mark-folder-list' に列挙したフォルダが Summary モー ドである場合、マークの付いている行に色がつきます。 `mew-highlight-mark-folder-list' のデフォルトは '("+inbox") であり、 `mew-use-highlight-mark' のデフォルトは `t' です。

`mew-use-highlight-header'`t' の場合、Message モードと Draft モードでヘッダが色付けされます。デフォルトは `t' です。

`mew-use-highlight-body'`t' の場合、Message モードと Draft モードで本文が色付けされます。デフォルトは `nil' です。

`mew-use-highlight-url'`t' の場合、Message モードの URL を 示す文字列が強調されます。デフォルトは `t' です。

`mew-use-highlight-x-face'`t' で、かつ XEmacs を使っている 場合、ヘッダ中の X-Face: が Message モードでアイコン化されます。XEmacs でのデフォルトは `t' です。

上級

ここでは、以下の変数について説明します。

いつも入れて欲しいヘッダは、`mew-header-alist' に連想リスト形式で定 義して下さい。以下に例を示します。

(setq mew-header-alist
      '(("X-fingerprint:" . "6B 63 38 88 67 5E 96 8E  CE A4 62 73 3F 11 64 94")
        ("X-URL:" . "http://www.mew.org/~kazu/")))

引用ラベルは、引用するフィールドを `mew-cite-fields'、ラベルの書式 を `mew-cite-format' に定義します。引用記号は `mew-cite-prefix' に指定します。デフォルトは、以下のようになってい ます。

(defvar mew-cite-fields '("From:" "Subject:" "Date:"))
(defvar mew-cite-format "From: %s\nSubject: %s\nDate: %s\n\n")
(defvar mew-cite-prefix "> ")

引用ラベルに Message-ID: を加え、ユーザ名付の引用記号にするには、以下の ようにします。

(setq mew-cite-fields '("From:" "Subject:" "Date:" "Message-ID:"))
(setq mew-cite-format "From: %s\nSubject: %s\nDate: %s\nMessage-ID: %s\n\n")
(setq mew-cite-prefix-function 'mew-cite-prefix-username)

フック

Mew で用意されているフックをまとめます。

`mew-init-hook'
Mew の起動時に評価されます。
`mew-summary-mode-hook'
Summary モードに入るときに評価されます。
`mew-virtual-mode-hook'
Virtual モードに入るときに評価されます。
`mew-message-mode-hook'
Message モードに入るときに評価されます。
`mew-message-hook'
メッセージが Message モードで表示される度に評価されます。
`mew-draft-mode-hook'
Draft モードに入るときに評価されます。
`mew-cite-hook'
Draft モードで引用する際に呼ばれます。通常 supercite を設定するために使 います。
`mew-send-hook'
メッセージを送信する前に評価されます。
`mew-quit-hook'
Mew の終了時に評価されます。
`mew-summary-inc-sentinel-hook'
imget が終了する際に評価されます。
`mew-summary-scan-sentinel-hook'
imls が終了する際に評価されます。
`mew-summary-exec-hook'
Summary モードの `x' の実行が終了する際に評価されます。

Config

IM の "Config" ファイルに case 文を記述すると imget や imput の挙動を変 化させられます。たとえば、Config が以下のように記述されていたとしましょ う。

Imget.Src=pop/apop:kazu@mail.mew.org
FromDomain=Mew.org
case wide
Imget.Src=pop/rpop:kazu@mx.wide.ad.jp
FromDomain=wide.ad.jp
case iijlab
Imget.Src=imap:kazu@mailbox.iijlab.net
FromDomain=iijlab.net

通常では、imget は APOP を使って mail.mew.org から kazu のメールを読み込 みます。また、imput は送信されるメッセージに From: がない場合(mew-from が nil の場合など)、ユーザ名である kazu と Mew.org を @ で連結した文字 列を From: に指定します。

もし --config=wide が指定されると、imget は RPOP を使って mx.wide.ad.jp から kazu のメールを読み込みます。また、imput は From: に対し kazu@wide.ad.jpを選ぶようになります。

このように imget や imput は、--config オプションで指定された文字列をも とに、有効な case 文を選択します。上の例から明らかですが、この機能を使う と読み込むメールボックスや送信時の From: を変更できて便利です。

Mew は起動時に Config の case 文を調べます。もし、1 種類以上の case があ る場合、`mew-config-list' に設定します。--config が指定されない場合 に読まれる部分は、default という文字列で表現されます。上の例では、 `mew-config-list' には、'("default" "wide" "iijlab") が設定されま す。

Summary モードで `C' を押すと、`mew-config-list' を補完の候補 として利用しながら、imget に渡す --config の値を選択できます。デフォルト では "default" です。もし他の値が設定されていた場合、たとえば "wide" が 設定されていた場合、`i' は次のように表示します。

Getting +inbox (wide)...

imput に case の選択を指示するには、--config オプション以外に、送信する メッセージのヘッダ中の Config: フィールドで指定できます。Draft モードで は、See section ヘッダの補完 で説明したように、Config: というフィールド名を `TAB' で補完できます。また、`mew-config-list' の値を `TAB' で補完可能です。さらに、`C-cTAB' を使えば、 `mew-config-list' の値を循環的に補完できます。

しかし、自分で値を選ぶのはめんどうです。Mew は整頓先のフォルダを推測する のだから、Config: の値も推測して欲しいと思うでしょう。もちろん、Mew は Config: の値を推測できます。Config: の推測ルールは、 `mew-config-guess-alist' に設定できます。書式は、See section 指定したルールから推測 で 説明した `mew-refile-guess-alist' と同じです。

1 つ例を挙げてみましょう。

(setq mew-config-guess-alist
   '(("To:"
      ("wide.ad.jp" . "wide")
      ("mew.org" . "mew"))))

この場合、To: が wide.ad.jp に合致すれば "Config: wide" を、mew.org にマッ チすれば "Config: mew" を挿入します。

この推測を利用して Config: を挿入できるタイミングは以下の 3 つです。

  1. `mew-config-insert-when-prepared'`t' なら、草稿を用意した 時点。
  2. `mew-config-insert-when-composed'`t' なら、 `C-cC-m' でメッセージを作成した時点。
  3. `C-cC-o' と入力した任意の時点。

参考までに書きますが、ホスト名で Config を変更したい場合は、以下の行を ".emacs" に入れるとよいでしょう。

(setq mew-config-guess-alist
   (list (cons nil (system-name))))

Mew の起動を速くする

長い間使うと Mew の起動が次第に遅くなる理由は、フォルダ数が増えているか らです。Mew は、起動時にフォルダ名の一覧を集めていることを思い出して下さ い。

Mew の起動を速くするには、cron で impath を叩き "~/Mail/.folders" に結果 を入れておきます。

impath --list + > ~/Mail/.folders
impath --list = >> ~/Mail/.folders

また、以下の行を "~/.emacs" に入れて下さい。

(setq mew-use-folders-file-p t)

mew-use-folders-file-p が t の場合、Mew は起動時に "~/Mail/.folders" を 読み込みます。また、mew-use-folders-file-p が t の場合、`C-uZ' はフォ ルダを調べたあと結果を "~/Mail/.folders" に保存します。

アイコンのある生活

コンパイルの仕方にもよりますが Text Emacs のメニューってかっこ悪くて使う 気になりません。しかし、XEmacs はメニューがおしゃれなのに加えて、さまざ まな機能を持ったアイコンをツールバーに表示できます。

XEmacs で Mew を使えば、アイコン・ベースのインターフェイスでメッセージを 読み書きできます。アイコン・ベースのインターフェイスは、従来のキー入力に よるインターフェイスと親和性が高いように設計されています。

アイコン・インターフェイスの使い方は.....、説明するまでもありません。直 感的にわかるはずです。でも少しだけ手ほどきを。

Summary、Virtual、および、Draft モードの標準のアイコンに束縛されている機 能を利用するには、左ボタンをクリックして下さい。

マルチパートのメッセージを読み書きする際に表示されるアイコンは、左ボタン のクリックでそのバーを表示し、右ボタンを押すとポップアップ・メニューが表 示されます。このメニューのおかげで、パートに対しさまざまな処理が可能となっ ています。

マルチパートのアイコンは、デフォルトで標準のアイコンの右に表示されます。 左に表示するのが好きな人は、以下のように設定して下さい。

(setq mew-multipart-icon-position 'left)

XEmacs の導入になかなか踏み切れない人は、以下の URL を参照し、XEmacs で 動く Mew の雰囲気を味わってみるのもよいでしょう。

http://www.Mew.org/

メッセージの作法

メッセージをやりとりする際には、最低限のマナーがあります。マナーを守って いないメッセージは読みにくいため、大変損します。簡潔かつ適切な文章を書き、 なるべく相手に理解してもらえるよう努力しましょう。

メッセージを書く際に気を付けるべき項目を以下に示します。

To: と Cc: を正しく書く
To: が目的の人で、Cc: は参考までに送り付ける人です。自分のアドレスが Cc: の場合は、読み飛ばす人がいますから注意して下さい。また、不必要なアドレス を To: や Cc: に書いて、相手に迷惑をかけないようにしましょう。
Subject: には本文の内容を的確に短く書く
Subject: を見て読むか決める人がいますから、不適切な Subject: だと読んで もらえないかもしれません。長い Subject: は読みにくいので止めましょう。
改行は行末を、空行は改段落を表す。1行は半角70文字程度にとどめる
意味もなく1行おきに書いたり、なん行にも渡って改行しないのは読みづらいで す。とくに行が長いと引用するのに困ります。また、行頭にいくつかの空白文字 を入れて右によせて書く人がいますが、これも無意味です。テキストの表示は、 使っているコンピュータでまちまちですから、結局自分のコンピュータでみため がよくても、他人のコンピュータでそうであるとは限らないのです。
必要な部分だけを引用する
面倒でも不要な部分は削りましょう。Mew を使っていれば、引用は楽勝のはずで す。
シグニチャは簡素にする
長いシグニチャは単なる自己満足です。
いたずらメッセージを送らない
こんなことは注意したくありませんが、それでも不幸のメッセージなどを送って くる人がいます。人格を疑われることを理解すべきです。

また、インターネットのマナーは RFC1855 を読むといいでしょう。See section 参考文献 を参照して下さい。著者は、正確な文章の書き方について学生のためにまとめた 入門書を WWW で公開しています。興味があれば、以下の URL にアクセスして下 さい。

http://www.mew.org/~kazu/japanese.html

MIME ってなぁに?

今までのメッセージ、正確には RFC822 メッセージは、本文にテキストしか格納 できない規格でした。MIME は RFC822 を拡張した多目的メッセージです。

MIME は、ヘッダに

MIME-Version: 1.0

というフィールドを持ちます。このフィールドがない場合は、RFC822 メッセー ジです。MIME では、データの型を示す Content-Type: と符号化方式を示す Content-Transfer-Encoding: が重要なフィールドです。以下ではこれらのフィー ルドや MIME の特長について説明します。

データの型指定

MIME では、Content-Type:(以下 CT:)というフィールドにデータの型を指定でき ます。以下は、本文が US-ASCII である MIME の例です。

MIME-Version: 1.0
Content-Type: Text/Plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Subject: hello
From: Kazu

Hi all,

CT: が省略された場合は、Text/Plain; charset=us-ascii として取り扱われま す。また、CT: Text/Plain のときに、charset が省略されると US-ASCII と解 釈されます。

このように MIME では、CT: がテキストの場合は、charset で文字コードを指定 できます。日本語には ISO-2022-JP を使います。

MIME では、本文に複数のデータを格納できます。これをマルチパートといいま す。マルチパートのそれぞれのパートは、コンテントヘッダとコンテントボディ から構成されています。CT: はヘッダだけでなく、コンテントヘッダ中にも現れ ます。逆に、ヘッダは特殊なコンテントヘッダだと考えても構いません。

詳しくは、See section マルチパート を参照して下さい。

以下に重要な CT: を示します。

`Text/Plain'
テキスト
`Message/Rfc822'
MIME を含むメッセージ。ヘッダと本文という構造がある。
`Multipart/Mixed'
マルチパート
`Application/Postscript'
PostScript
`Application/Octet-Stream'
バイトストリーム。バイナリファイルと思ってよい。
`Image/Gif'
GIF
`Image/Jpeg'
JPEG
`Audio/Basic'
AU 形式の音声ファイル
`Video/Mpeg'
MPEG
`Message/External-Body'
メッセージの外部に実体がある

安全な符号化

以前からバイナリを配送するために uuencode という符号化プログラムが使われ ていました。uuencode は、8ビット3文字を6ビット4文字に変換しますが、変換 後にたくさんの記号が現れます。これらの記号はメッセージのヘッダで特殊な意 味を持つものが含まれており、ヘッダの拡張のためには利用できません。

また、空白文字も使われているのも厄介です。なぜなら、BITNET のファイルシ ステムには、行末に空白がありえないのです。もし、uuencode で符号化したと きに、行末にたまたま空白が現れたとしましょう。これを BITNET のメッセージ ゲートウェイが受け取ると、当然行末の空白を削ってしまいます。よって、受信 者は元のバイナリファイルを復元できません。

そこで、MIME では本文用に 2 つの符号化方式を定めました。

Base64 符号化方式
"0-9A-Za-z/+" の64文字を用いて、8ビット3文字を6ビット4文字に変換する。も ともとは PEM で考え出された。
Quoted-Printable 符号化方式
表示不可能な文字を "=" に続けて16進表記する。

各コンテントヘッダ中の Content-Transfer-Encoding:(CTE:)で符号化方式を指 定します。取り得る値は以下の通りです。

7bit
無変換。7ビットの行から構成される。
8bit
無変換。8ビットの行から構成される。
binary
無変換。8ビットのデータ・ストリーム。
base64
Base64 で符号化した。7ビットの行から構成される。
quoted-printable
Quoted-Printable で符号化した。7ビットの行から構成される。

CTE: が省略された場合は `7bit' として扱われます。

ISO-2022-JP は7ビットの文字コードですから、CTE: は 7bit です。つまり、 CTE: は省略して構いません。もちろん、base64 や quoted-printable で符号化 しても構いませんが、フォルダにあるメッセージを more などで直接読めなくな るので、お勧めではありません。

マルチパート

CT: が Multipart である場合、そのコンテントボディには複数のデータが格納 されることを意味します。データの境界は boundary に指定された文字列で区切 られます。以下に例を示します。

Message-Id: <13060.789566615@mew.org>
From: Kazuhiko Yamamoto =?ISO-2022-JP?B?GyRCOzNLXE9CSScbKEI=?=
        <kazu@mew.org>
Subject: =?ISO-2022-JP?B?GyRCPC8kTjMoGyhC?=
To: m-sakura@ccs.mt.nec.co.jp
Mime-Version: 1.0
Content-Type: Multipart/Mixed; boundary=simple
Content-Transfer-Encoding: 7bit

--simple
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit

奈良名物「鹿」の絵を送ります。
 
--かず
    
--simple
Content-Type: Image/Gif
Content-Transfer-Encoding: base64
Content-Description: "Deer on the Nara park"
    
R0lGODdhFwG8ANUAABETDCoYDC8lFi4dJxcnKTMwLkUUC04uG2opEkgeJ04yMWg4Ly1FLVJG
NWdSMywyTks1Tmc3RjdRVjNcalRMUG9UU1xbY051eG9pcIcxEp5bM8d1NI1VSJhrVrRwUpR0
cKZ1dcN9WXuHOWmHc7WJN6yLbcyEWNCZdDZjjml0i5t7im+TmGeRonWly5aLlrCLlK+arJmn
pbettMabktWumM+zsrnCrtTLua21ycq6x6/J3NbQ1+bk29na5dzp8+7w8ywAAAAAFwG8AAAG
/8CLcPhYtVgNyirWasZYEgDhIWGxRiXWcTIATHS/Hs6K2+1wt59azYtdJnBhKrVaWYcp7==
    
--simple--

この例では、"simple" という文字列で区切られています。boundary に指定され た文字列には、先頭に "--" が付きます。最後の区切りには、後ろにも "--" が 付きます。

各パートは、コンテントヘッダとコンテントボディから構成されます。両者は、 ヘッダと本文のように空行で区切られます。逆にいうと、ヘッダと本文は、それ ぞれ特殊なコンテントヘッダとコンテントボディです。

テキスト以外を MIME で送信する場合は、必ずマルチパートを利用するようにし ましょう。たとえば、本文にいきなり Audio/Basic を格納できますが、そんな メッセージを受け取ったらびっくりします。パート1に説明のテキスト、パート2 に Audio/Basic を入れた方が親切でしょう。

マルチパートは、入れ子構造にできます。つまり、マルチパートのマルチパート なども作成できます。

ちなみに境界ですが、前後の改行まで含みます。上記の例では、 "CRLF--simpleCRLF" が区切りです。

ヘッダの拡張

ヘッダはメッセージの配送に関わる情報を格納しているため、配送プログラムが 誤動作するような文字列を入れるべきではありません。MIME では、ヘッダに以 下のような形式で非 ASCII を安全な文字列に符号化し挿入します。

=?<charset>?<encoding>?<encoded-string>?=

指定できる <charset> は CT: Text/Plain の charset と同じです。<encoding> には、`B'`Q' 符号化方式があり、前者は Base64 符号化方式、 後者は Quoted-Printable 符号化方式の亜種を意味します。

ISO-2022-JP には、`B' 符号化方式が奨励されていますが、`Q' 符号 化方式でも構いません。しかし、`Q' 符号化方式に対応しているインター フェイスはあまりないようです(もちろん Mew は対応していますが)。

たとえば、「山本和彦」をこの形式で符号化すると以下のようになります。

=?ISO-2022-JP?B?GyRCOzNLXE9CSScbKEI=?=

嗚呼漢字コード

ここでは、非 ASCII 文字をメッセージで使うために人々が奮闘してきた歴史を漢字 を例に取って振り返ります。

電子メールと地域化

1982年、互換性を保証するために、電子メールの規格 RFC822 が記述されました。 電子メールはアメリカ育ちであったため、残念ながら本文やヘッダには、ASCII 文字列しか格納できない規格でした。

しかし、英語以外の言語を母国語としている人達にはとても不便です。そこで、 配送に関わるヘッダはともかく、本文に母国語を格納するため RFC822 はさまざ まな国で拡張されました。

ヨーロッパ諸国では、ウムラウト(アクセント)文字を表す8ビット1文字のコード Latin 1 がよく使われるようになりました。Latin 1 は ISO-8859-1 と呼ばれる ことがあります。

日本では、7ビット2文字の JIS コード、UNIX でよく使われる 8ビット2文字の EUC コード、パソコンで使われている 8ビット2文字の SJIS コードが存在しま した。日本のインターネットの前身である JUNET の先駆者達は、配送のための コードとして JIS コードを ESC シーケンスで切り替える、いわゆる JUNET コー ドを選びました。

JUNET コードは ISO-2022-JP と呼ばれることがあります。ISO-2022-JP を使え ば、複数の文字コードを切り替えるだけでなく、使われている文字コードが何か という情報を得られます。

Latin 1 や ISO-2022-JP に見られる本文の拡張は、あくまで地域に限定された 紳士協定です。RFC822 を使う限り、地域間を越えてメッセージをやりとりする には、結局英語を使うしかないのです。

RFC822 は記述が曖昧なので、ヘッダや本文に 7 ビット文字である ISO-2022-JP を入れてもよいように読めます。たぶん、この説明を読めば誤解が解けるでしょ う。「RFC822 は、ヘッダと本文のシンタックス(構文)を7ビット、それらのセマ ンティックス(意味)を US-ASCII と定めています。ISO-2022-JP のシンタックス は RFC822 に従っていますが、セマンティックスは RFC822 に違反しています。」

MIME の登場

絵や音声などを配送したい、地域化された RFC 822 の架け橋となる規格が欲し いなどの要望を満たすために、1992年に MIME が規定されました。MIME では、 テキストの文字コードを charset というパラメータに指定できます。たとえば、 ISO-2022-JP は以下のように指定します。

Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit

日本語のテキスト

この charset は役に立つのでしょうか? もちろんです。charset は、インター フェイスに正しくテキストの文字コードを伝える役割を果たします。ノルウェー の人が ISO-8859-1 で日本にメッセージを送ってきたとしましょう。ISO-8859-1 に対応しているインターフェイスなら、対応するフォントで表示すればいいし、 対応していないなら無視すればいいのです。Mew では、Mule の内部コードに変 換する関数の引数に charset を利用しています。

「ISO-2022-JP の上位互換規格であり、さまざまな文字コードを格納できる ISO-2022-JP-2 などを使えば charset など要らない。なぜなら ISO-2022-JP-2 自体に文字コードの情報が含まれているから」という人がいます。しかし、これ らの人は MIME を理解できているとは思えません。

確かに理想的にいえば、この主張は正しいのです。しかし、MIME は現実主義で す。MIME はユーザが明日から ISO-2022-JP-2 を使うようになるという大胆な仮 定はしていません。また、世の中に存在する脆弱な配送プログラムでも安定して 動くように考慮されています。世の中は、そんなにお行儀のよいプログラムばか りではないし、たくさんの資源を使えるほど豊かでもないのです。「明日から UNICODE を使え」と言われたらいやでしょう?

MIME は、さまざまに地域化されたメッセージの架け橋として charset を用意し ました。MIME で増えた作業は、charset の挿入だけであり、今まで通り我々は ISO-2022-JP を使えます。ISO-2022-JP-2 を標準にしたいなら、ISO-2022-JP-2 をデフォルトで使う地域を広げていけばよいのです。この意味で、 ISO-2022-JP-2 と MIME は相反してはなく、逆に、ISO-2022-JP-2 の普及のため に MIME を利用できると言えます。もちろん文字コードの符号化方式である ISO-2022-xx に charset という単語が相応しくないのは、MIME の開発者も認め ているところです。

MIME を使えば、非 ASCII 文字を ASCII 文字列に符号化し、ヘッダに挿入でき ます。このような枠組で、電子メールの配送プログラムの誤動作を防止し、また、 ヘッダに英語以外の言語を書くことを実現しているのです。もう、Subject: に 「日本語を書いてはいけません」なんて言わなくてよくなりました。:)

MIME は地域化された RFC 822 を禁止する規格ではありません。よって、MIME のインターフェイスは、以下のような動作が望まれています。

読むとき

  1. ユーザがデフォルトの charset を選べるようにしておく。
  2. MIME-Version: がないメッセージの場合は、本文をデフォルトの charset とし て扱う。
  3. MIME-Version: があり、Content-Type: がない場合は、US-ASCII として扱う。
  4. MIME-Version: と Content-Type: がある場合は、Content-Type: に指示された charset を利用する。

書くとき

  1. MIME-Version: と Content-Type: Text/Plain の charset を必ず付ける。
  2. charset には、最小限の文字集合を選ぶようにする。たとえば、英語だけなら US-ASCII を選ぶようにする。すると、US-ASCII だけなのに、ISO-2022-JPと書 いてあるため kterm が呼び出されるといった事態がなくなる。

スプールやフォルダに ISO-2022-JP を EUC-Japan に変更して格納する場合は、 無条件に変換してはいけません。きちんと charset を確かめ、ISO-2022-JP だ けを EUC-Japan に変換するようにして下さい。

ヘッダに非 ASCII 文字を挿入する機能は MIME の一機能ですが、実際には、 MIME-Version: フィールドは必要ありません。

正規化の概念

残念ながら、世の中のコンピュータは、データをさまざまな方法で表現します。 以下によく利用されている OS とその行末を示します。

よって、行末に関して取り決めがないと、これらの OS 間では安全にテキストが 交換できません。RFC822 では、メッセージの再送の際に行末を CRLF に変換す ることになっています。このように、共通の書式への変換を「正規化」といいま す。SJIS や EUC-Japan を ISO-2022-JP に直すのも正規化の一種です。

さて、PGP の暗号化や署名ついて考えてみましょう。たとえば、Mac のユーザが 行末が CR である文章に署名し UNIX ユーザに送ったとします。UNIX ユーザが 行末を LF に変換し署名を確認したとしたら、検証が失敗するのは明らかでしょ う。そこで、PGP への入力はあらかじめ正規化されている必要があるのがお分か りになると思います。

PGP で暗号化したり署名したりする場合は、まずテキストを ISO-2022-JP に変 換し、行末を CRLF に直して下さい。

Mew のこだわり

Mew の精神を一言で表すと、

Mew wants something simple or nothing at all.

となります。つまり、複雑な機能は要らないのです。単純で吟味された機能しか 提供しません。

たくさんの方が「昔使っていたメーラにはこんな機能があって便利だから、Mew にも付け加えて欲しい」といいます。しかし、こんな説明では著者を説得するの は難しいでしょう。なぜなら、Mew は他のプログラムが今までやっていないこと を実現しようとしているからです。「昔はこうだった」という理由はあまりにも 力不足です。

たとえば、返答や転送したメッセージに、`R' マークや `F' マーク を付けて欲しいという人がいます。しかし、たくさん議論をした結果、サポート しないことに決めました。なぜなら、返答したメッセージにだけ確実に `R' マークを付けるのは困難だからです。もし、`a' で返答しようと 思い、Draft モードで `C-cC-q' でやっぱり止めたらどうでしょう? `a' を押した時点で、`R' マークを付けるのであれば、誤ってマーク が付くことになります。不完全な機能を提供するよりも、もっと進んだマルチパー トエディタを作ろうと思っています(詳しくは、See section 作りたくてうずうずしていること を参照して下さい)。

もし自分の意見が正しいと思うのでしたら、根気強く著者を説得して下さい。著 者は忙しいので昔説明されたことはすぐ忘れてしまいますし、人間ですから思い 込みや偏見があります。素晴らしいアイディアを理解できないことが多分にある でしょう。どうか、くじけないで下さい。

「Mew は mh-e に似ている」とか「Mew は mh-e の改良バージョン」などとは 言わないで下さい。見ためは似ているかもしれませんが、Mew は mh-e とは全く 異なった概念で実装されているのですから。

Mew の来た道

役には立ちませんが、Mew の歴史をひもといてみましょう。

もう mh-e はたくさんだ

1993年の秋に WIDE Project の FJPEM の実験に参加しました。そのころ、櫻井 さんが FJPEM を mh-e で利用しやすくするため、mhpem を作りました。mhpem に触発され、1994年の冬は修論の逃避行動を兼ねて mhpem の改良に励みました。

mhpem は暗号メッセージを自動的に復号化するおしゃれなプログラムでしたが、 いくつか問題がありました。大きな問題は、mh-e が簡単に拡張できない柔軟性 に欠けたプログラムだったことです。復号化したメッセージは、次に読むときは 速くなるよう保存したいと思いますが、mh-e を改良するのは難しいのです。 mh-e がバージョンアップし、mhpem が新しい mh-e で動かなかったとき、著者 は切れました。

復号化した PEM を保存したい。MIME も保存したい。どうして、簡単に MIME を 取り扱えるインターフェイスがないのか。なぜ、複数のメッセージから簡単に引 用できないのか。マークを駆使して面白いことができないなんて。メッセージの 整頓が大変なのはいやだ。もう、mh-e はたくさんだったのです。

mhpem の自動復号機能、mhasync の非同期な scan 機能、ウインドウの大きさを 動的に変更できる GNUS の機能、マークを付けて複数のニュースを取り扱える gnus-mark の機能、VM のような整頓機能、メッセージのキャッシュ、美しく柔 軟性のあるプログラミングスタイル.... さまざま断片が著者の中で1つにまとま り始めました。1994年3月、奈良への引越し前のことでした。

Mew の誕生

1994年4月、本格的に Mew の製作に取り掛かりました。一覧表示の終了を待たな くてよい機能、動的なウインドウ設定、マーク、メッセージのキャッシュなどは、 お手本があったので早くから実装されていました。

はじめの頃は MIME を MIME モードで表示していました。マルチパートのメッセー ジで `SPC' を押すと、Summary モードから MIME モードに移動していたの です。しかし、歌代さんは言いました、「なぜ MIME モードかあるの? Summary だけで十分ではないか」。目から鱗の落ちる思いでした。

このころの大きな障害は、メッセージの整頓方法と MIME の作成方法でした。

確かに VM のように、ユーザにいちいち Lisp を書かせれば、整頓は簡単になり ます。しかし、ユーザにこまめに設定させること自体が嫌だったのです。「メッ セージのヘッダから無限の可能性のある整頓先を模索するのは馬鹿だ。限りのあ る実際のフォルダの中から候補を選べばいい」。このアイディアを思いついたと きは、次の朝が来るのが待ち遠しかったものです。整頓機能は、後に乃村さんに よって強化されました。

複雑な MIME を簡単に作成するにはどうすればよいか? ユーザには作成文法と か MIME の書式などの理解を押しつけるのはあんまりだ。一言説明すれば、だれ でも直感的に MIME を作れるようにしたい。この答えをくれたのは門林さんです。 「MIME の構造ってファイルシステムに似ているよね」。そうです、シングルパー トをファイル、マルチパートをディレクトリと考えればよいのです。ファイル操 作はだれにでもできるし、ファイル構造を MIME に変換する仕事は Mew が請け 負います。

PGP との出会い

FJPEM の実装に疑問を感じていた著者は、1994年の初夏 PGP と出会いました。 そのころは PGP 2.5、つまり、MIT が RSAREF を使って、RSA の特許に抵触しな い非商用の PGP を模索していた時期です。PGP 2.6 のリリースによって、Phil と RSADSI は和解しましたが、RSAREF を使っている 2.6 は米国国外への持ち出 しが禁止されています。

しかし、2.3a を基にした 2.6ui の存在を知り、PGP ユーザになりました。PGP を始めて使ったときの感動は忘れられません。本当に計算し尽くされたプログラ ムです。1995年の冬、サンディエゴで開かれた通称 ISOC Security Symposium(NDSS)という国際会議に参加しました。このとき、プロシーディング と共に O'Reilly から発売されてすぐの Simson の PGP という本をもらいまし た。久々に読みふけった傑作中の傑作です。このような理由から、PEM と MIME の統合よりも、PGP と MIME の統合に力を注ぐようになりました。PGP/MIME は 現在実験段階であり、標準化にはまだ時間がかかります。

「暗号化とか署名はマークで表せばいい」というアイディアは、櫻井さんと情報 処理全国大会の論文を書いたときに教えてもらいました。マークならいつでも好 きなときにキャンセルできるという利点を理解するのは少し時間がかかりました けど。

MH からの独立

「うまい寿司を食わせてやるからみんな福岡に集合だ」のかけ声のもと、1997年 4月にそうそうたるプログラマが福岡ドームのある百道に結集しました。九州シ ステム情報技術研究所にハック部屋を借り、近くのハイヤット・リージェンシー を寝床にして、3泊4日に及ぶ MH からの独立作戦が開始されました。

とにかく食べる、気に入るまでハックする、とことんまで議論するという作業を なんども繰り返し、福岡を後にするころにはほぼ Mew が MH から独立し、IM を 使うようになっていました。(この週のエンゲル係数が高かったのは言うまでも ありません。)

その後もメーリングリストで議論を戦わせ、合意を取り、またハックするという 作業を繰り返し、最後に歌代先生が高速化の魔法を唱えて、ようやく7月頭にベー タリリースにこぎつけました。

ニュースの統合

1994年秋の WIDE 合宿で Mew の BOF(Birds Of a Feather::井戸端会議)をしま した。この BOF で佐野さんは「電子メールとニュースの中間がメーリングリス トだよね」という忘れられない言葉を残しました。闇の中で手探り状態だったと ころに、一筋の光を見た思いです。Perl 5 が安定してきた現在、ニュースの統 合は間近に迫っています。

Mew の行く道

ここでは 2.xx 以降で実装する予定の機能や概念について説明します。

インターネットメッセージ

ここでは、電子メール、メーリングリスト、ニュースを統合するインターネット メッセージの概念について説明します。

電子メール、メーリングリスト、ニュースを配送範囲と通信相手の観点から分類 すると以下のようになります。配送範囲とは実際にメッセージが配送される人の 範囲を示し、通信相手は通信相手が特定できるかを意味します。

          電子メール  メーリングリスト  ニュース
配送範囲   狭い            中間           広い
通信相手   特定        特定/不特定      不特定

このように、電子メール、メーリングリスト、および、ニュースは段階的な関係 にあるので、メッセージという概念で一括りにしても問題ありません。

電子メールやメーリングリストでは、配送先を To: や Cc: で指定します。電子 メールの To: とメーリングリストの To: を区別しないのですから、ニュースの 配送先を示すフィールド Newsgroups: を To: や Cc: と同一視しても構わない はずです。

よって、インターフェイスが賢ければ、以下のように To:、Cc:、Newsgroups: を同時に書いても問題ありません。

To: person@foo.ac.jp
Cc: ml@bar.com
Newsgroups: comp.baz
Subject: test
From: kazu@xxx.ac.jp

The body.

このような記述が許されると、今まで繁雑だった電子メール、メーリングリスト、 および、ニュースへの操作は、メッセージの送信、返答、転送というたった3つ の操作で網羅できます。

送信

メッセージには、To:、Cc:、Newsgroups: を同時に書けます。もちろん、省略し ても構いません。

To: person@foo.ac.jp
Cc: ml@bar.com
Newsgroups: comp.baz
Subject: test
From: kazu@xxx.ac.jp
        
The body.

メッセージのインターフェイスは、To: や Cc: があれば SMTP を喋り、 Newsgroups: があれば NNTP を喋ってメッセージを配送します。

返答

返答のコマンドを入力すると以下のような草稿が用意されます。

To: kazu@xxx.ac.jp
Cc: person@foo.ac.jp, ml@bar.com
Newsgroups: comp.baz
Subject: Re: test
From: person@foo.ac.jp

The body.

From: が To: へ、To: や Cc: が Cc: へ、Newsgroups: が Newsgroups: へ用意 されます。もし、自分が希望する配送範囲を越えているなら、適宜削って下さい。 ここが肝心なところです。Mew は、「可能性のある配送範囲を列挙し、不要なら ユーザが削る」という単純なルールしかありません。

「電子メールで回答したい」とか「ニュースにだけに返答したい」という希望は よく分かります。でもさまざまなパターンがある中でだれもが納得するルールを 決めるのは困難ですし、また、規則が繁雑になれば理解できなくなります。です から、基本的に上記のポリシーは変更しません。

電子メールとニュースを統合し、経験を積んだ際には、「電子メールでの回答」 といったコマンドを提供するかも知れません。しかし、それはあくまで「近道」 なのです。

転送

転送のコマンドを入力すると、To:、Cc:、そして、Newsgroups: を訊かれます。 よって、どのサービス間でも簡単に転送できるようになります。転送には MIME 形式を使います。

To: guy@foo.ac.jp
Cc: ml@bar.com
Newsgroups: comp.hack
Subject: Forward: test
From: Alice
MIME-Version: 1.0
Content-Type: Multipart/Mixed; boundary=boundary
Content-Transfer-Encoding: 7bit
        
--boundary
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit

こんなメッセージが届きました。

// Alice

--boundary
Content-Type: Message/Rfc822     
Content-Transfer-Encoding: 7bit

To: person@foo.ac.jp
Cc: ml@bar.com
Newsgroups: comp.baz
Subject: test
From: kazu@xxx.ac.jp
        
本文

--boundary--

作りたくてうずうずしていること

マルチパートエディタを作る

入手方法とメーリングリスト

ここでは、Mew の入手方法とメーリングリストについて触れます。

Mew の入手方法

Mewの最新バージョンは以下から入手できます。

ftp://ftp.Mew.org/pub/Mew/mew-current.tar.gz

ときどきサンプルメッセージが以下のように提供されます。

ftp://ftp.Mew.org/pub/Mew/samples.tar.gz

メーリングリスト

新しいバージョンは、

mew-release@Mew.org

で英語でアナウンスしています。入りたい人は

mew-release-ctl@Mew.org

宛に本文に "#help" と書いて電子メールを送って下さい。mew-release には著 者以外が投稿できないように制限が加えられています。

Mew の質問や議論などは、

mew-dist@Mew.org

に日本語で投稿できます。mew-dist へ入りたい人は

mew-dist-ctl@Mew.org

宛に本文に "#help" と書いて電子メールを送って下さい。mew-dist は mew-release に含まれているので、mew-dist に登録すれば、自動的に mew-release 宛の電子メールを受け取るようになります。

Mew の質問はできるだけ mew-dist へお願いします。著者には受け取った全ての 質問に答えている時間はありません。mew-dist へ質問すると、他の人が答えて くれることを期待できます。

謝辞

まずはじめに、櫻井三子さんにお礼を述べたいと思います。彼女が mhpem を作 り触発してくれなかったら Mew を作ることはなかったからです。(もうなくなっ てしまいましたが) mew-url や mew-pem の多くの部分を書いています。また、 複雑なメッセージの作成にマークを使うというヒントも与えてくれました。

Summary モードをもっと簡素にと助言して頂いた歌代和正さん、MIME とファイ ル構造って似てるよねと言ってくれた門林雄基さん、いつも電子メールに関して 貴重な助言をしてくれる中村素典さん、電子メールとニュースを統合するきっか けを与えてくれた佐野晋さんに心から感謝します。

いつも素晴らしいコードを提供しくれる酒井清隆さん、メッセージの整頓機能を 賢くしてくれた乃村能成さん、こまめに英語を直してくれる牛島幹友さん、info を書く気にさせてくれた島慶一さん、ありがとうございます。

I would like to thank David Worenklein for contributing many codes. I'm grateful to Atsushi Shionozaki, Darren Stalder, and David Worenklein for proofreading my paper. I'd like to acknowledge to Scandinavia guys for their good suggestions.

IM の作成に協力してくれた伊藤純一郎さん、笠原義晃さん、中村素典さん、乃 村能成さん、西和則さん、太田英憲さん、IM を高速にしてくれた歌代和正さん に感謝します。Mew を OS/2 で動かす努力とたくさんのテストをしてくれる奥西 藤和さんにお礼を申し上げます。Mew が Win95/WNT で動くようになったのは、 主に北口修一さんと山口修平さんの努力によるところが大きいです。Mew が XEmacs で楽しいのは、寺西裕一さんのおかげです。

Mew はたくさんの人の貢献の上に成り立っています。ここに名前を挙げていない 方にも心から感謝しています。著者はなにぶん多忙ですので、全ての電子メール に答える時間が取れません。返事が帰って来なかった人は、本当にすみませんで した。

著作権について

Mew は以下の著作権に従います。

Copyright (C) 1994, 1995, 1996, 1997, 1998 Mew developing team.
All rights reserved.

変更の有無にかかわらず、ソースおよびバイナリ形式の再配布および利用は、以 下の条件を満たしていれば、これを許可する。

  1. ソース・コードの再配布は、上記の著作権表示、この条件項目、および、以下の 免責事項を保存しなければならない。
  2. バイナリ形式の再配布は、上記の著作権表示、この条件項目、および、以下の免 責事項を、その配布に付随する説明書、あるいはその他の資料のいずれかに明記 しなければならない。
  3. 前もって特別に許諾を得ない限り、このソフトウェアから派生した製品の推奨や 販売促進のために、このチーム名と貢献者達の名前を利用してはならない。

このソフトウェアは「このままの形で」提供され、明示的あるいは言外の保証 は、商用利用および特定目的への適合に対する言外の保証も含み、またこれら だけに限らず、存在しない。たとえ以下のような損害の可能性を示唆されてい たとしても、どのような形にしろこのソフトウェアの利用から発生した問題に おいて、このチームと貢献者達は、(代替製品やサービスの調達; 利用権、デー タ、あるいは利益の損失; あるいは営業の中断を含む、またこれらだけに限ら ず)直接的に、間接的に、偶然に、特別に、懲罰上、あるいは、必然的に生じ てしまった損害に対し責任はなく、いかなる責任理論上でも契約の有無に係わ らず厳密な責任はなく、また(過失あるいはその他を含む)不法行為に対しても 責任はない。

CD ROM に入れて配布したいという方は、できるだけ教えて下さい。教えてくれ なくても怒りませんが、教えて頂けるとありがたいです。配布を断ったことは ありません。

この Info の著作権は、著者に属します。配布、利用共に自由ですが、無保証で す。また、この Info から発生した被害に対し、著者は一切責任を負いません。

著者紹介

Kazuhiko YAMAMOTO // Kazu 山本和彦 // かず(くん) 1970年、南を虹の松原を湛える海岸、東をウグイが泳ぐ川、北と西をなだらかな 山に囲まれる山口県光市に生まれる。中学生のときに映画「ウォーゲーム」を見 てセキュリティに関心を持つ。自然と遊びながら、高校まで光市で過ごす。

1988年、九州大学工学部電気系入学のため福岡へ。都会の殺伐さ、汚れた海、言 葉の違いに苦しみながらも卒業まで至る。3年生のときに初めて電子メールに触 れ、4年生のころにインターネットに惹かれていく。Sun に入社渡米を試みるが、 不幸にも米国のビザ発行ポリシーが厳しくなった時期と重なり、失敗。

1992年、九州大学大学院工学研究科情報工学専攻へ進学。本格的にインターネッ トの研究に従事。経路制御を専門とする。セキュリティの普及活動を開始。修士 2年の春に、書く書くと言ってなかなか書かなかった「ハッピーネットワーキン グ」をリリース。

1994年、奈良先端科学技術大学院大学に助手として就任。約4年の大学教官生活 中に、Mew の開発に取り組む。「若いうちにプログラムを書こう、教育は歳をとっ てからもできるよね」という結論に至り、1998年 IIJ 技術研究所に新たな研究 環境を求めた。

研究分野 :: メッセージ・システム、IP version 6
ひとこと :: 「うまく説明できないものは、本質的に優れていない」
ふたこと :: 「優しいものが優れている」

Email: Kazu@Mew.org
URL: http://www.mew.org/~kazu/
PGP fingerprint: 6B 63 38 88 67 5E 96 8E CE A4 62 73 3F 11 64 94

用語集

Mew で使う単語をまとめます。

`フォルダ'
受け取ったメッセージを保存するファイルやディレクトリ
`Summary モード'
メッセージの一覧を表示するモード
`Message モード'
テキストメッセージの内容を表示するモード
`Draft モード'
メッセージを書いたり、作成したりするモード
`MIME'
本文にテキスト以外のオブジェクトを格納したり、ヘッダに非 ASCII 文字を挿 入したりできる規格です。MIME を使えば、本文にテキスト、絵、音声などを同 時に取り込めますし、また、Subject: に日本語を書けます。Multipurpose Internet Mail Extensions の略称で、「多目的メール」と呼ぶことがあります。 詳しくは、See section MIME ってなぁに? を参照して下さい。
`PGP'
Phil Zimmermann 氏が作成した暗号メッセージや電子署名を実現するプログラム です。Pretty Good Privacy の略です。
`ニュース'
ネットニュース、あるいは、USENET ニュースのこと。
`メッセージ'
電子メールやニュース、あるいは、MIME などの総称。インターネットメッセー ジの省略語。

参考文献

ここでは、参考文献を紹介します。RFC(Request For Comments) は、インターネッ トで知識を共有するために書かれた文献です。たとえば、以下のサイトから入手 できます。

ftp://ftp.isi.edu/in-notes/

電子メールやニュースを使い始めたばかりで、仕組みがよく分からない人は、以 下の文献を参考にして下さい。

インターネットでのマナーは、以下の RFC を読んで学んで下さい。

昔のテキストメールの書式や配送の仕組みは以下の RFC を参照しましょう。

MIME については、以下の RFC を読んで下さい。

ニュースの書式と配送プロトコルは、以下の RFC で定義されています。

PGP を学ぶなら、以下の書籍がいいでしょう。

PGP と MIME の統合については、以下を参照して下さい。

PGP/MIME に関する研究は、以下の論文にまとめられています。

Mew の実装は、以下の論文を参考にして下さい。

変数索引

Jump to: m

m

  • mew-auto-get
  • mew-cc
  • mew-cite-fields
  • mew-cite-format
  • mew-cite-prefix
  • mew-dcc
  • mew-draft-mode-hook
  • mew-fcc
  • mew-field-circular-completion-switch
  • mew-field-completion-switch
  • mew-fields
  • mew-from, mew-from
  • mew-from-list
  • mew-header-alist
  • mew-highlight-mark-folder-list
  • mew-mail-domain-list
  • mew-msg-rm-folder-list
  • mew-msg-rm-policy
  • mew-multipart-icon-position
  • mew-refile-alist-max-length
  • mew-refile-ctrl-multi
  • mew-refile-guess-alist
  • mew-refile-guess-control
  • mew-signature-as-lastpart
  • mew-signature-file
  • mew-signature-insert-last
  • mew-summary-show-direction
  • mew-summary-sort-fields
  • mew-use-folders-file-p, mew-use-folders-file-p
  • mew-use-highlight-body
  • mew-use-highlight-cursor-line
  • mew-use-highlight-header
  • mew-use-highlight-mark
  • mew-use-highlight-mouse-line
  • mew-use-highlight-url
  • mew-use-highlight-x-face
  • mew-window-use-full

  • This document was generated on 25 August 1998 using the texi2html translator version 1.52.