Mew 6.8 マニュアル
*************

山本和彦
作成 1996/02/19
更新 2018/06/07

このマニュアルでは、Mew バージョン 6.8 について解説します。このマニュアルの他に、Mew に関する有益な情報は Mew の公式ホームページ (http://www.Mew.org/)から得られるかもしれません。

はじめに読んでね
********

Mew とは、テキスト・メールやマルチメディア・メール(MIME)、ニュース、セキュリティ機能(PGP、S/MIME、SSH、SSL)を便利に利用するためのユーザインターフェイスです。最新の検索サービスとも連動します。

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

Mew の特長
=======

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

  - 複雑な構造を持つメッセージを簡単に表示できます。メッセージを表示する作業は、SPC を押すだけです。

  - コピー程度のファイルの操作を知っている人ならだれでも簡単に複雑なメッセージを作成できます。

  - メッセージの一覧表示が終了するまで待たなくても、メッセージを読み始められます。

  - Summary モードのメッセージの一覧を保存しているので、フォルダを移動した場合は、更新された部分だけを一覧表示します。

  - メッセージの整頓先を賢く推測します。たくさんメッセージを受け取る人は、これがないと生きていけません。

  - Draft モードでは、フィールド名、メールアドレス、氏名、ドメイン名、フォルダ名を補完できます。

  - キーワードなどによって、探したいメッセージを簡単に検索できます。

  - PGP や S/MIME で暗号化されたメッセージを自動的に復号化します。また、電子署名を自動的に検証します。

  - MIME の構造を解析したり、PGP や S/MIME の署名を検証したりするのには少し時間がかかります。そこで、ユーザがあるメッセージを読んでいる間に、次のメッセージをあらかじめ処理しておくことで高速性を実現しています。解析されたメッセージは、しばらくの間保存されます。

  - PGP や S/MIME を使って、メッセージを簡単に暗号化したり、署名したりできます。

  - 複数のフォルダを 1 つのフォルダに見せかけられます。

  - メッセージのやり取りの流れを可視化するセレクションやスレッドの機能を備えています。特定のキーワードに合致したメッセージでセレクションを作り、さらにそのスレッドを作成できます。

  - フォルダ名を入力する場合、フォルダ名の一部をキーとして検索できます。

Emacs のバージョン
============

Emacs 24.3 以降を使って下さい。これらより前のバージョンや XEmacs は、サポートしていません。

モード
===

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

Summary モード
     メッセージの一覧を表示し選択するモード。

Virtual モード
     単数あるいは複数のフォルダからある条件に合致したメッセージを取り出し、仮想的に 1 つのフォルダにしたモード。Summary モードに似ている。セレクションやスレッドと呼ばれる。

Message モード
     メッセージの内容を表示するモード。

Draft モード
     メッセージの送信、返答、転送を準備するためのモード。

Header モード
     既存のメッセージのヘッダのみを編集し送信するためのモード。

Edit モード
     既存のメッセージを編集し、新しいメッセージを作成するためのモード。

Addrbook モード
     アドレス帳にエントリを登録するためのモード。

フォルダの種類
=======

Mew の用語では、メッセージが届く場所を「メールボックス」と呼びます。メールボックスの種類としては、ローカルのメールボックス、POP サーバ、IMAP サーバ、および NNTP サーバがあります。

また、Mew 自身がメッセージを格納する箱のことを「フォルダ」と呼びます。フォルダ名は、一文字の記号からなる修飾子と文字列が連結された形式になっています。たとえば、「+inbox」というフォルダの修飾子は「+」です。

Mew のフォルダには、「ローカル・フォルダ」と「リモート・フォルダ」の 2 種類があります。

ローカル・フォルダとは、Mew が動いているコンピュータに「本物」が作られるフォルダです。そのフォルダに格納されるメッセージも本物です。(ですから、もしそのフォルダのメッセージを消してしまうと復元できません。)

ローカル・フォルダの修飾子は "+" です。以下に特殊なローカル・フォルダを挙げます。

+inbox
     ローカルのメールボックスや POP サーバに届いたメッセージを、ローカルに移動させて最初に保存するためのローカル・フォルダ。メッセージを整理する場合は、"+inbox" から他のローカル・フォルダに移動させることになる。

+draft
     書きかけのメッセージを保存しておくローカル・フォルダ。

+queue
     書き終ってメールの配送に適した書式に変換されたメッセージが溜るローカル・フォルダ。"+queue" のメッセージは、いずれ SMTP によって送信さる。

+postq
     書き終ってニュースに投稿するのに適した書式に変換されたメッセージが溜るローカル・フォルダ。"+postq" のメッセージは、いずれ NNTP によって送信される。

リモート・フォルダとは、サーバ側にあるフォルダをローカルにコピーしたものです。本物のメッセージはあくまでサーバ側にあり、ローカルにはメッセージのコピーがキャッシュされます。

利用できるリモート・フォルダの修飾子を以下に示します。

%
     IMAP のフォルダ。例："%inbox"

$
     POP サーバのサーバ側のフォルダ。例："$inbox" (POP サーバのフォルダは 1 つしかないので、"$" で始まるリモート・フォルダは "$inbox" のみ。)

-
     ニュースのニュースグループ。例："-fj.mail.reader.mew"

サーバが異なれば、リモート・フォルダの実体も異なります。複数のサーバは、ケースという機能を使って指定します。詳しくは、see config を参照して下さい。あるケースに対するリモート・フォルダは、"case:folder" のように、フォルダ名の前にケース名を付けて指定します。ケースが "default" である場合は、"case:" の部分を省略可能です。

ケースと修飾子の組は、あるメッセージが属す世界を構成しています。メッセージは、それが属す世界の中を移動できます。受け取ったメッセージは、後で探しやすいように、適切なフォルダに移動させて保存します。この整頓の方法について、see Refile を参照して下さい。

なお、POP サーバには "$inbox" というフォルダしかありませんから、"$" の世界でメッセージを移動させることはできません。また、ニュースの記事は自分のものではありませんから、"-" の世界でもメッセージの移動は不可能です。

世界を超えてメッセージを移動させたい場合は、コピーします。ただし、コピー先はローカル・フォルダに限定されます。この方法は、see retrieving で説明されています。

フォルダのリストを作成しておくと、フォルダ名に対し補完が利用できて便利です。フォルダのリストを作成する方法は、see status-update を参照して下さい。

初期設定
====

Mew を起動するには、組織の設定ファイルか自分の "~/.emacs" に以下の設定が必要です。

     (autoload 'mew "mew" nil t)
     (autoload 'mew-send "mew" nil t)

     ;; Optional setup (Read Mail menu):
     (setq read-mail-command 'mew)

     ;; Optional setup (e.g. C-xm for sending a message):
     (autoload 'mew-user-agent-compose "mew" nil t)
     (if (boundp 'mail-user-agent)
         (setq mail-user-agent 'mew-user-agent))
     (if (fboundp 'define-mail-user-agent)
         (define-mail-user-agent
           'mew-user-agent
           'mew-user-agent-compose
           'mew-draft-send-message
           'mew-draft-kill
           'mew-send-hook))

Latin-1 のために、Emacs を --unibyte オプション付で起動しているか、環境変数 EMACS_UNIBYTE と共に起動している場合、以下の設定を "~/.emacs" に入れて下さい。

     (set-language-environment "Latin-1")
     (set-input-method "latin-1-prefix") ;; or "latin-1-postfix"

Latin-1 のために、以下のような設定をしているなら、削って下さい。これは Latin-1 にカスタマイズするための方法としては推奨されていませんし、この設定では Mew は正しく動きません。

     (standard-display-european 1)

Mew は起動時に、"~/.mew.el" を読み込みます。Mew に関する設定は、このファイルに入れるとよいでしょう。

メールアドレスを指定するために、以下の設定が必要です。

     ;; (setq mew-name "your name") ;; (user-full-name)
     ;; (setq mew-user "user name of e-mail address") ;; (user-login-name)
     (setq mew-mail-domain "domain of e-mail address")

SMTP を使ってメッセージを送信するためには、以下の設定が必要です。

     (setq mew-smtp-server "your SMTP server")  ;; if not localhost

POP を使ってメッセージを受信する場合は、以下の設定が必要です。

     ;; (setq mew-pop-user "your POP account")  ;; (user-login-name)
     (setq mew-pop-server "your POP server")    ;; if not localhost

メッセージの受信にローカルのメールボックスを利用したい場合は、以下のような設定が必要です。

     ;; To use local mailbox "mbox" or "maildir" instead of POP
     (setq mew-mailbox-type 'mbox)
     (setq mew-mbox-command "incm")
     (setq mew-mbox-command-arg "-u -d /path/to/mbox")
     ;; If /path/to/mbox is a file, it means "mbox".
     ;; If /path/to/mbox is a directory, it means "maildir".

IMAP を使ってメッセージを受信する場合は、以下の設定が必要です。

     (setq mew-proto "%")
     ;; (setq mew-imap-user "your IMAP account")  ;; (user-login-name)
     (setq mew-imap-server "your IMAP server")    ;; if not localhost

ニュースを読み書きする場合は、以下の設定が必要です。

     ;; (setq mew-nntp-user "your NNTP account")
     (setq mew-nntp-server "your NNTP server")

パスワード
=====

メッセージを送受信したり、PGP や S/MIME を使ったりする場合には、パスワードを訊かれることがあります。パスワードを入力する前に以下の条件のどちらかが満たされていることを確認しましょう。

  - Emacs が目の前のコンピュータで動いている

  - Emacs が遠隔のコンピュータで動いているが、なんらかの暗号手段を使って通信している。

どちらの条件も満たされない場合は、パスワードを入力しないで下さい。入力すると盗聴される恐れがあります。

パスワードを何回も入力するのが面倒な人は、パスワードを保存する機能を利用して下さい。2 つの方法があります。

 1. パスワードをメモリに一時的に蓄える。ファイルには書き出さない。

 2. パスワードをメモリに Mew が起動している間中蓄える。Mew/Emacs の終了時に、パスワードを暗号化しファイルに書き出す。

1. の機能を利用するには、以下のように設定します。

     (setq mew-use-cached-passwd t)

2. の機能を利用するには、まず GnuPG をインストールします。GnuPG は、バージョン 1.x、2.1.23以降に対応しています。バージョン2.1.23以降を使う場合は、 "~/.gnupg/gpg.conf" に以下の設定を加えます。

     no-auto-key-retrieve
     auto-key-locate local

そして、以下のように設定します。

     (setq mew-use-master-passwd t)

両方の変数が t の場合、2. の機能が利用されます。

1. の機能：あらゆるパスワード(POP、PGP など)が一時的にメモリに保存されます。パスワードが保存されている間は、パスワードの入力を省略できます。保存されているパスワードは一定時間(通常は 20 分)が過ぎると消去されます。ただし、保存されているパスワードが内部で利用されると、保存期間が延長されます(20 分に戻ります)。

2. の機能：Mew の起動時に、マスターパスワードを訊かれます。Mew はそのマスターパスワードで、暗号化されているパスワードを復号化し、メモリに蓄えます。たとえば、以前 POP のパスワードを入力していれば、それがメモリに蓄えられていますから、次に POP のパスワードが必要な際、POP のパスワードの入力を省略できます。はじめてマスターパスワードを利用する際は、確認のためマスターパスワードを 2 回訊きます。また、たとえば POP のパスワードも 1 回だけ入力するように促されます。Mew の起動時に、間違ったマスターパスワードを入力することもあるでしょう。その場合、1. の機能を有効にしているなら、 1. の機能が使われます。有効でなければ、パスワードの保存機能は利用されません。

マスターパスワードを変更するには、Summary モードで C-cC-m と入力します。

メモリに保存されているパスワードは、暗号化されていません。そこで、1. または 2. の方法を使う場合は、他の人に自分が起動した Emacs を触られないように気をつけて下さい。もし席を空け、Emacs をよく知っている他の人に Emacs を操作された場合、パスワードを盗み取られる可能性があります。

起動
==

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

M-x mew
     Mew が起動していなければ、まず Mew を起動する。そして、メッセージを取得するか、あるいは単にデフォルトのフォルダへ移動する。

     まず、「修飾子」は mew-proto とケースから決定される。 (see config を参照)

     「修飾子」が +(ローカル・フォルダ)なら、mew-mailbox-type からメールボックスが決定される。(see retrieving を参照) その他、すなわちリモート・フォルダなら、メッセージを取得するためのプロトコルが修飾子に応じて決る。

     mew-auto-get が t なら、到着したメッセージが非同期に取得され、Summary モードへ一覧表示される。

     mew-auto-get が nil なら、修飾子によって決定したデフォルトのフォルダへ単に移動する。

C-uM-x mew
     mew-auto-get の値を逆だと考えて、M-x mew を実行する。

C-xm
     mail-user-agent が設定されている場合、Draft モードへ移行する。

Emacs で Mew を起動すると可愛い 2 匹の子が猫現れます。

なお、Mew を終了する方法は、see Quit を参照して下さい。

メッセージを表示する
**********

(Mew が起動中でも、起動中ではなくても) M-x mew と入力すると、Mew はメッセージを以下のように一覧表示します。

     * 03/12 Hidenori Ohta  今週末                    |日曜にストーンマジック
      M03/14 ももちゃん     能登の写真                |この前撮った写真を添付
       03/15 Neat Sumikawa  Re: ワイン                |じゃぁ、水曜日に例の店

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

上記の例のように Summary モードは、マーク、データ型(Mew が付けるマーク)、日付、差出人、Subject:、本文から構成されています。

Summary モードを消去する方法については、see Quit を参照して下さい。

読み方の基礎
======

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

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

SPC
     メッセージを読み進める。つまり、メッセージを表示し、スクロールさせ、他のメッセージに移動して表示する。カーソルが移動する方向は、 see summary-mode を参照のこと。

C-uSPC
     メッセージを先頭から再表示。

DEL
     現在のメッセージを下にスクロールさせる。不必要なヘッダフィールドは、ウインドウの上に隠れている。よって、DEL を入力すると、それらが現れる。

RET
     現在のメッセージを 1 行上にスクロールする。

M-RET

-
     現在のメッセージを 1 行下にスクロールする。

C-n
     下の行へ移動。

C-p
     上の行へ移動。

n
     下方向に移動し表示。対象となるのは、パート、* マークの付いたメッセージ、マークの付いていないメッセージ。

C-un
     下方向に移動し表示。対象となるのは、* マークの付いたメッセージ、マークの付いていないメッセージ。

p
     上方向に移動し表示。対象となるのは、パート、* マークの付いたメッセージ、マークの付いていないメッセージ。

C-up
     上方向に移動し表示。対象となるのは、* マークの付いたメッセージ、マークの付いていないメッセージ。

j
     入力された行番号に従ってその行へ移動。

C-uj
     入力されたメッセージの番号に従ってその行へ移動。

MIME を表示する
==========

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

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

     * 03/12 Hidenori Ohta  今週末                    |日曜にストーンマジック
      M03/14 ももちゃん     能登の写真                |この前撮った写真を添付
       03/15 Neat Sumikawa  Re: ワイン                |じゃぁ、水曜日に例の店

M マークの付いたメッセージで SPC を押すと、ヘッダを Message モードに表示すると共に、以下のように Summary モードでマルチパートの構造を簡素に表示します。

     * 03/12 Hidenori Ohta  今週末                    |日曜にストーンマジック
      M03/14 ももちゃん     能登の写真                |この前撮った写真を添付
     B    2  Image/Jpeg                   写真1                    noto1.jpg
     Q    3  Application/Postscript       能登の地図               map.ps
       03/15 Neat Sumikawa  Re: ワイン                |じゃぁ、水曜日に例の店

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

マルチパートの各行は

  - マーク (Content-Transfer-Encoding:)

  - パート番号

  - データ型 (Content-Type:)

  - 説明 (Content-Description:)

  - ファイル名 (Content-Disposition:)

から構成されています。Content-Description: はパートに対する Subject: と考えていいでしょう。この表示は Draft モードの添付領域とほとんど同じです。

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

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

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

      M03/15 かずくん       Fw: 能登の写真            |写真が送られてきたので
          2  Message/Rfc822               能登の写真
     B    2.2  Image/Jpeg                   写真1                  noto1.jpg
     Q    2.3  Application/Postscript       能登の地図             map.ps

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

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

このように MIME の構造は複雑になりうるので、解析するのには時間がかかる場合があります。しかし、Mew は次に読まれるメッセージを予想し、ユーザが現在のメッセージを読んでいる間に、次のメッセージをあらかじめ解析しておくことで高速性を実現しています。解析されたメッセージは、しばらくの間保存されます。

メッセージの終りの部分がはっきりと分かるように、Mew はメッセージの最後に "[End of message]" という文字列を表示します。また、パートの終りでは、 "[Message is continued]" という文字列を表示します。これらの文字列はそれぞれ、mew-end-of-message-string と mew-end-of-part-string で指定できます。

MIME の解析を制御する
=============

メッセージの解析を制御するために、以下の変数が用意されています。

mew-file-max-size
     解析するメッセージの大きさの上限。メッセージの大きさがこの値以下なら、解析し表示する。越えているなら、解析せずに生のまま表示する。初期値は 100000 バイト。

mew-header-max-length
     解析するメッセージのヘッダ長の上限。ヘッダの行数がこの値以下なら、メッセージを解析して表示する。越えているなら、解析を途中で止めてメッセージを壊れた形で表示する。初期値は 100 行。

mew-decode-broken
     規格違反のメッセージを解析する際に、寛容になるか否か。t なら寛容に、nil なら厳密に解析する。寛容に解析する際に規格違反があった場合は、X-Mew: フィールドに表示する。初期値は t。

mew-use-text-body
     本文のテキストをヘッダと同時に表示するか否か。t なら、本文がシングルのテキスト、および、本文がマルチパートで最初のパートがテキストの場合、そのテキストをヘッダと同時に表示する。nil の場合は、マルチパート内のパートのように表示する。初期値は t。

mew-use-alternative
     Multipart/Alternative の取り扱い。Multipart/Alternative であるメッセージには- マークが付いている。t なら、 mew-mime-multipart-alternative-list の優先順位に従って、1 つのパートを表示する。nil なら、通常のマルチパートとして表示する。初期値は t。

mew-use-text/html
     Text/Html の取扱い。nil の場合は HTML を解析せずに表示。それ以外なら HTML を解析して表示。初期値は nil。

mew-use-text/xml
     Text/Xml の取扱い。nil の場合は XML を解析せずに表示。それ以外なら XML を解析して表示。初期値は nil。

これらの変数に関する基本的なコマンドは、. です。このコマンドは、以下のように動きます。

1) このコマンドがメッセージ上で実行されると、そのメッセージのキャッシュが削除され、メッセージが解析されて再表示されます。

1a) もし現在のメッセージの大きさが mew-file-max-size を越えているなら、MIME は解析されず、そのまま表示されています。この場合、このコマンドはこの上限に関わらずに現在のメッセージを解析し、再表示します。

1b) もし現在のメッセージのヘッダ長が mew-header-max-length を越えているなら、メッセージが壊れたように表示されています。この場合、このコマンドはこの上限に関わらずに現在のメッセージを解析し、再表示します。

1c) もし現在のメッセージが : で表示されているなら、マルチパートの構造は、通常とは違うように表示されています。この場合、このコマンドはマルチパートの構造を通常と同じように再表示します。

1d) もし mew-use-text/html が nil なら、HTML は解析されず、そのまま表示されています。この場合、このコマンドは HTML を解析し、再表示します。

2) もしこのコマンドがパート上で実行された場合、そのパートが再表示されます。

2a) もし mew-use-text/html が nil なら、HTML は解析されず、そのまま表示されています。この場合、このコマンドは HTML を解析し、再表示します。

. 以外にも、以下のような便利なコマンドがあります。

.
     メッセージを解析し、再表示する。

C-u.
     mew-decode-broken を逆にしてメッセージを解析し直す。 See invalid を参照のこと。

:
     mew-use-alternative と mew-use-text-body を反転させた ..

C-u:
     mew-use-alternative と mew-use-text-body を反転させた C-u..

,
     現在のメッセージやパートを生の書式で Message モードに表示する。

C-cTAB
     メッセージ全体をファイルとして read only で開く。

C-uC-cTAB
     メッセージ全体をファイルとして開く。

暗号メールや電子署名を表示する
===============

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

      S03/18 神田パソコン館 見積書                    |先日承りましたノートPC
      E03/21 匿名希望       秘密のメール              |

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

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

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

本文全体、あるいは、一部のパートが暗号化されている場合、Mew はパスフレーズを訊いてきます。パスフレーズを入力する際の注意事項については、 see start を参照して下さい。入力されたパスフレーズは、あなたの秘密鍵を復号化するのに使われます。そして、復号化された秘密鍵によって、暗号化されているメッセージを解くわけです。

暗号メッセージを表示するには、暗号化された数だけパスフレーズを入力する必要があります。これは Mew が安全を期して、通常パスフレーズを保存しないからです。もしこれがわずらわしいなら、Mew にパスフレーズを保存させることも可能です。詳しくは、see password を参照して下さい。

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

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

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

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

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

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

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

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

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

PGP/MIME について：

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

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

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

Mew では PGPv2、PGPv5、GNUPG に対応しています。これらは Summary モードにおいて、C-cC-v で切替え可能です。これら複数の PGP を使いたい人は mew-prog-pgp2、mew-prog-pgp5、mew-prog-gpg に対し、それぞれ PGPv2、PGPv5、GNUPG のコマンド名を設定して下さい。また、Mew の起動直後に利用する PGP のコマンド名を mew-prog-pgp に設定して下さい。なおパスフレーズは、それぞれの PGP に対し独立に保存されます。

なお昔ながらの PGP メッセージは、自動的に処理できません。このような PGP メッセージに対しては、C-cC-z で復号化や署名の検証ができます。

メッセージの取得
========

メールボックスへ到着したメッセージを +inbox へコピーし一覧表示するには、 i を使います。コピー元のメールボックスは mew-mailbox-type によって決ります。(M-x mew を実行した際に、mew-proto が + の場合も、mew-mailbox-type に従ってメッセージがコピーされます。) 以下に取りうる値を示します。

'mbox
     ローカルのメールボックス。デフォルトでは "incm" という外部コマンドを使い、メッセージを取得する。設定方法は、see configuration を参照のこと。

'pop
     POP サーバ。POP を POP らしく使う方法。(初期値)

'imap
     IMAP サーバ。IMAP らしくない利用方法なので、推奨されていない。

ローカル・フォルダでメッセージの一覧を再表示するには、s を使います。

リモート・フォルダでメッセージを取得、あるいは再取得する場合にも s を使います。IMAP やニュースでは、i は利用せず、s を使うのが一般的です。

s を使うと範囲を訊いてきます。Mew で重要な範囲の意味を以下に示します。

update
     「Summary モードの最後のメッセージの次」から「フォルダ内の最後のメッセージ」まで。つまり、Summary モードと実際のフォルダ内のメッセージの差分。

all
     フォルダ内のメッセージすべて。ローカル・フォルダでは、Summary モードの表示がおかしくなったときに、内容を一新するために用いる。リモート・フォルダでは、すべてのメッセージの再取得。

sync
     あるリモート・フォルダに対し、サーバ側では消えたメッセージのキャッシュを削除する。リモート・フォルダに対してのみ有効。

+draft、+queue、+postq では、デフォルトの範囲は all となっています。それ以外のフォルダでは、デフォルトの範囲が update となっています。ですから、+draft、+queue、+postq 以外では、s の後に RET を押すだけで、現在のフォルダに対し最新の一覧を得られることになります。

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

<num1>-<num2>
     <num1> から <num2> まで。ローカル・フォルダに対してのみ有効。

<num1>-
     <num1> から最後まで。ローカル・フォルダに対してのみ有効。

-<num2>
     最初から <num2> まで。ローカル・フォルダに対してのみ有効。

last:<num>
     最後の <num> 個。

リモート・フォルダで s を C-u 付きで呼び出すと、「ヘッダのみのコピー」と「ヘッダと本文の両方のコピー」を反転できます。これらの動作は、POP、IMAP、NNTP に対し、それぞれ mew-pop-header-only、 mew-imap-header-only、mew-nntp-header-only で定義でき、初期値はすべて nil です。つまり、初期値は「ヘッダと本文の両方のコピー」になっています。

サイズが大きなメッセージは、全体ではなく一部が取得されているかもしれません。このようなメッセージには、T マークがついています。このメッセージの全体を取得するには、そのメッセージ上で I と入力します。

たとえば、$inbox に T マークのついたメッセージがあるとしましょう。このメッセージの上で I を押すと、メッセージの全体が取得できます。

メッセージの取得に関するコマンドを以下にまとめます。

i
     ローカル・フォルダでは、+inbox フォルダに移動し、到着したメッセージを取得して一覧を表示する。mew-auto-flush-queue が t なら、 +queue にあるメッセージを送信する。詳しくは、see send を参照のこと。リモート・フォルダでは、そのデフォルトのフォルダに移動し、s + update を実行する。

C-ui
     mew-auto-flush-queue の値を逆だと思って、i を実行する。

I
     T マークの付いている一部だけが取得されたメッセージの全体を取得する。

     ローカル・フォルダで実行した場合、ケースと mew-mailbox-type により取得方法が決る。mew-pop-delete または mew-imap-delete の値が t なら、メールボックスのメッセージを削除する。

     リモート・フォルダで実行した場合、ケースと取得方法はそのフォルダから決る。サーバ側のメッセージは常に保存される。

C-uI
     mew-pop-delete または mew-imap-delete を逆転させて I を実行する。

s
     フォルダの一覧を取る。

C-us
     リモート・フォルダにおいて、「ヘッダのみのコピー」と「ヘッダと本文の両方のコピー」を反転させて、一覧を取る。

lc
     リモート・フォルダのメッセージをローカル・フォルダへコピーする。

フォルダの移動
=======

フォルダの移動には g を入力して下さい。以下のようにフォルダ名を訊かれます。

     Folder name (+inbox): +

":" の右側を編集可能領域と呼ぶことにしましょう。この例では、編集可能領域に修飾子 "+" が表示されています。修飾子に続けて任意の文字列を入力し、 RET を押せば、フォルダ名が決定されたことになり、そのフォルダへ移動します。

フォルダを移動した際に Summary モードの一覧が古いと判断した場合は、自動的に差分が追加表示されます。

"()" 内がデフォルトのフォルダです。単に RET を押し "+" を入力すると、デフォルトのフォルダを入力したものとして扱われます。

補完を利用するには、TAB や SPC を押して下さい。

さて、話を g を押した直後に戻しましょう。

     Folder name (+inbox): +

たとえば、"+" を "%" に変更するには、通常なら "+" を削り、"%" を入力する必要があります。これでは面倒なので、"+" の後で "%" を入力すると、"+" が "%" に置き換わるようになっています。このように、修飾子の直後で他の修飾子を入力すれば、削る作業をせずに置き換え可能です。

リモート・フォルダを入力する場合、see config で説明するケースを指定したい場合もあるでしょう。ケースは、フォルダ名の前に ":" で区切って入力します。たとえば、"home" というケースの "%inbox" に移動したいとしましょう。このとき、"home:%inbox" と入力する必要があります。しかしこれは面倒なので、任意の場所で C-cTAB を押すと利用可能なケースが、フォルダ名の前に循環的に補完されます。次の例を考えて下さい。

     Folder name (+inbox): %inbox

ここで C-cTAB を入力すると、以下のようになります。

     Folder name (+inbox): home:%inbox

フォルダ名の一部を指定して、フォルダを検索したいこともあるでしょう。この場合には、前方検索の C-s か後方検索の C-r が利用できます。以下は、C-s を押したときのミニバッファの状態です。

     Folder name (+inbox): ()

編集領域に現れた "()" が、検索モードに移行したことを表わしています。ここで文字を入力していくと、マッチした候補が "()" の中に表示されます。以下は "mew" で検索したときの例です。

     Folder name (+inbox): (+work/mew-release) mew

候補を確定する際には、RET を入力して下さい。そうすると検索モードを抜けて、編集領域にこの候補が表示されます。

     Folder name (+inbox): +work/mew-release

さらに RET を押せば、このフォルダが入力されたことになります。

検索対象となるフォルダの一覧は、ケースと修飾子の組で決定されます。 C-s や C-r で検索モードに移るときに編集領域にある文字列から、ケースと修飾子が切り出され、フォルダの一覧が決定される訳です。

送信、返答、転送
========

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

w
     メッセージを書く。新しい草稿が Draft モードに用意される。 See Composing を参照のこと。

C-uw
     メッセージを書く。新しい草稿が Draft モードに用意される。現在のメッセージの From: にあるアドレスが、草稿の To: へコピーされる。

W
     あるメッセージのヘッダの一部だけを編集しメッセージを送信するために Header モードに入る。See resend を参照のこと。

a
     現在のメッセージに返答する。Draft モードに草稿が用意され、To: や Cc: が自動的に決定される。See reply を参照のこと。

C-ua
     現在のメッセージに対し送信者宛に返答する。

A
     現在のメッセージに返答する。Draft モードに草稿が用意され、To: や Cc: が自動的に決定された後、本文が引用される。See reply を参照のこと。

C-uA
     現在のメッセージに対し、引用付きで送信者宛に返答する。

f
     現在のメッセージを第 3 者に転送する。Draft モードに草稿が用意され、現在のメッセージが自動的に添付される。See forward を参照のこと。

F
     * マークの付いたメッセージを第 3 者に転送する。Draft モードに草稿が用意され、* マークの付いたメッセージが自動的に添付される。詳しくは see target mark を参照のこと。See forward を参照のこと。

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

E
     メッセージの再編集。または、MIME 形式でカプセル化されて戻ってきたメッセージの再編集。

      1. +draft では、メッセージが単に編集される。

      2. +queue と +postq では、メッセージが +draft に移動されて、編集される。

      3. それ以外では、メッセージが +draft にコピーされて、編集される。

     +draft、+queue、+postq では、ケースが復活する。

     他のフォルダでは、mew-case-guess-when-prepared が t なら、ヘッダのそれぞれのフィールドがケースに従って置き換えられる。詳しくは see config を参照のこと。

C-uE
     E と同じ。ただし、+draft、+queue、+postq 以外のフォルダで利用された場合は、mew-case-guess-when-prepared が t でも、オリジナルのヘッダが保存される。

便利な機能
=====

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

v
     「Summary モードのみ」と「Summary & Message モード」の切り替え。「Summary モードのみ」を選んでいる場合は、d は次のメッセージを表示しないので、連続してすばやく D マークを付けられる。

zv
     mew-use-header-veil が nil でないとき、To: と Cc: で mew-header-veil-count を越える行は「ベール」で隠されている。このコマンドは、それらの行の見える／見えないを反転させる。 mew-use-header-veil と mew-header-veil-count の初期値は、それぞれ t と 4。

_
     通常の行、折り返された行、長い行の順に行の表示を変える。

M-l
     現在の行を Summary モードの中央に移動させる。

C-cC-s
     Message モードで順方向段階的検索。

C-cC-r
     Message モードで逆方向段階的検索。

y
     メッセージ、あるいは、パートを入力したファイル名で保存する。

b
     Message モードの内容そのものを入力したファイル名で保存する。

C-uy
     保存するテキストの coding-system を指定して、メッセージ、あるいは、パートを入力したファイル名で保存する。

#
     mew-print-function を利用して Message モードの内容を印刷する。

C-u#
     プリンタ名を指定して Message モードの内容を印刷する。

|
     Message モードの内容をパイプで指定されたコマンドに出力する。

C-u|
     Message モードの本文(ヘッダを除く)をパイプで指定されたコマンドに出力する。

\
     このメッセージを引数にして、入力された外部コマンドを起動する。

B
     格納されているメッセージを取り出す。

C-uB
     格納されているファイルを取り出す。

C-cC-a
     現在のメッセージの情報をアドレス帳に登録する(see addrbook)。

C-cC-v
     PGP のバージョンを切替える(see cipher-viewing)。

C-cC-z
     昔ながらの自動処理できない PGP メッセージを PGP に復号化、検証させる(see cipher-viewing)。

C
     ケースを変更する。詳しくは、see config を参照のこと。

=
     フォルダ名とメッセージ番号を表示する。キャッシュ・メッセージの場合は、加えて ID とサイズも表示する。メッセージへのフルパスが、ウインドウマネージャのカットバッファに入る。

;
     Received: フィールドを解析し、分りやすく Message モードに表示する。

Rd
     フォルダを削除する。

Rr
     フォルダの名前を変える。

状態の更新
=====

いくつかの設定の変更には、その変更を反映するために、状態を更新しなければならない場合があります。変更が反映されなかったり、変更のためにエラーが生じるようになったりした場合は、以下のコマンドを利用して下さい。

Z
     アドレス帳(see addrbook)などの情報を更新する。

C-uZ
     現在の世界に対するフォルダのリストの情報を更新する。

状態を反転させるコマンドを以下にまとめます。

z8
     8 ビット・モード(mew-use-8bit)を反転させる。

zc
     解析したメッセージのキャッシュを消去する。

zd
     mew-debug を反転させる。

zo
     PGP を省略方法で作成する場合、PGP/MIME なのか古い PGP の書式なのか (mew-use-old-pgp)を反転させる。

zp
     解析、復号化のポリシ(mew-decode-broken)を反転させる。

zv
     Message モードでベールを使うか否か(mew-use-header-veil)を反転させる。

zw
     警告のレベル(mew-warning-field-level)が 2 なら 1 へ、1 なら 2 へ設定する。

規格違反のメッセージ
==========

以下のようなメッセージは、Content-Type: で charset が指定されていないので、本来 US-ASCII と認識されてしまいます。

     To: piglet
     Subject: 規格違反のメッセージ
     From: pooh
     MIME-Version: 1.0
     Content-Type: Text/Plain

     日本語の本文

また以下のようなヘッダも規格違反です。

     From: "=?iso-2022-jp?B?GyRCOzNLXE9CSScbKEI=?=" <kazu@example.net>

上の例では "=?" と "?=" で囲まれた部分はもともと日本語でした。メッセージの規格ではヘッダには ASCII のみが格納できると定められています。よって、 ASCII 以外の文字コードをヘッダに格納するには、ある規則に従って ASCII に符号化する必要があります。しかし、この符号化された文字列を 「"」 で囲むのは間違いです。「"」で囲まれた文字列は、そのままの形で取り扱われます。よって、上の例の "=?" と "?=" で囲まれた部分が日本語に復号化されることは本来ありません。

規格に無頓着な一部のメーラではこのような間違いを平気で犯します。正しい対処方法は、このようなメーラの作者に頼んで、規格を正しく実装するように変更してもらうことです。しかし、このようなメーラはあまりにも多いので、Mew ではできる限り復号化するよう試みます。そして、以下のような警告をヘッダに出します。

     X-Mew: Charset for body is not specified.
            To: has encoded-words in quoted text.

もし、規格に厳密に復号化したいのなら、mew-decode-broken を nil に設定して下さい。この値は C-u. を使うと動的に反転できます (see singlepart を参照)。

次のようなメッセージは、charset で指示されている文字コードと実際の文字が異なるため、文字化けを起こします。

     Content-Type: Text/Plain; charset=ISO-2022-JP

     Shift_JIS で書かれた日本語の本文

C-cC-l を使えば、charset で指定された文字コードを無視し、指定した言語の推測規則に従って文字コードを推測し、再表示させることができます。また、C-uC-cC-l で明示的に文字コードを指定し、再表示させることも可能です。

メッセージを作成する
**********

ここではメッセージの作成方法について説明します。

新しいメッセージを書くために、Draft モードに移行するには、次の手段があります。

 1. M-x mew-send と入力する。

 2. mail-user-agent が設定されている場合、C-xm と入力する。

 3. Summary モードで w を押す。

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

     To:
     Subject:
     From: Kazu Yamamoto <kazu@example.org>
     X-Mailer: Mew version 6.8 on Emacs 26.1
     ----

これを Draft モードといいます。Draft モードにおいて、"----" より上をヘッダ、下を本文と呼びます。

またメッセージへの返答(a や A)や転送(f や F) でも Summary モードから Draft モードへ移行します。

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

一旦用意した草稿を削除する方法については、see Quit を参照して下さい。

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

ヘッダの補完
======

ヘッダでは TAB に対し、以下のように各フィールド用の補完機能が割り当てられています。

  - フィールド名の補完

  - アドレスの補完 (To:、Cc: など) (see addr-comp を参照)

  - フォルダ名の補完 (Fcc:)

<フィールド名の補完>

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

     To: kazu@example.org
     RTAB

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

     To: kazu@example.org
     Reply-To:

<フォルダ名の補完>

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

     Fcc: TAB

"+" が補完されます。

     Fcc: +TAB

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

     Fcc: +bTAB

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

     Fcc: +backup

ヘッダの循環的な補完
==========

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

  - ドメイン名の循環的な補完 (To:、Cc: など)

  - From: の循環的な補完 (From:)

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

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

     To: kazu@C-cTAB

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

     To: kazu@example.orgC-cTAB

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

     To: kazu@example.jp

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

     To: kazu@wC-cTAB

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

     To: kazu@example.jp

<From: の循環的な補完>

草稿には、あらかじめ "mew-name <mew-user@mew-domain>" という形式で、 From: フィールドが挿入されています。

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

From: フィールド上では、C-cTAB は mew-from-list の値を循環的に補完します。mew-from-list は自分で設定してもよいですし、自動的に設定することも可能です。自動設定に関しては、see config を参照して下さい。

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

     From: Kazu Yamamoto (山本和彦) <kazu@example.org>C-cTAB

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

     From: Kazuhiko Yamamoto <kazu@example.jp>

アドレスの補完
=======

To: や Cc: では、アドレスを補完できます。補完には TAB を用います。

     To: kazuTAB

上記のように、アドレスの一部で TAB を押すと、以下のようにアドレスが補完される訳です。

     To: kazu@example.org

アドレスの補完に利用されるアドレスの種類には、以下の 3 つがあります。

 1. アドレス帳の展開規則

 2. アドレス帳の個人情報

 3. 送信時に学習されたアドレス

アドレスの補完には 2 つの方法が提供されています。 mew-use-full-alias によって選択します(初期値は nil)。

mew-use-full-alias が nil の場合、@ の前、つまりユーザ名(短縮名)が補完の対象となります。TAB を押すとユーザ名が補完され、補完しきったところでさらに TAB を押すとアドレスに「展開」されます。これをアドレスの補完(1)と呼びましょう。

アドレスの補完(1)(see addr-comp1)の利点は、上に書いた 3 種類のアドレスに対し、補完・展開が矛盾なく実行できることです。後述のように、「強制展開」も TAB で実行できます。欠点は、ユーザ名の部分が一意でなければならないので、あるユーザ名が登録されている場合、同じユーザ名を持つ別のアドレスを学習できないことです。

mew-use-full-alias が t の場合、学習されたアドレスに関しては、アドレスの全体が補完の対象になります。これをアドレスの補完(2)と呼びましょう。

アドレスの補完(2)(see addr-comp2)の利点は、ユーザ名が一致している複数のアドレスを学習できることです。欠点は、アドレス帳の個人情報に登録されているアドレスの先頭以外は利用できないことです。また、「強制展開」は、 M-C-e という (TAB とは別の) キーを押さなければいけないことです。

アドレス帳
=====

Mew ではアドレス帳("~/Mail/Addrbook")が利用できます。アドレス帳には 2 つの書式が用意されています。一方は「展開規則」を指定する書式、他方は「個人情報」を記述するための書式です。

まず、「展開規則」を記述するための書式を示します。

     <shortname>: <address1>[, <address2>, <address3>,...]

このように短縮名と展開すべきアドレスを : で区切って書きます。複数のアドレスに展開する場合は、それらのアドレスを , で区切ります。 (これは、To: などでアドレスが , で区切られているのと同じです。) , の後ろに空白を入れても構いません。以下に例を示します。

     pooh:           winnie-the-pooh@example.net
     piglet:         piglet@example.org
     friends:        pooh, piglet

次に、「個人情報」を記述するための書式を示します。

     <shortname> <address1>[, <address2>, <address3>,...] <nickname> <fullname>

このように 4 つの要素を空白で区切ります。<shortname> が短縮名です。 <nickname> と <fullname> はそれぞれニックネームと正式な氏名であり、日本語でも構いません。(ニックネームの使い方は see summary-mode と see draft-mode を参照して下さい。)

2 番目の要素はアドレスです。複数のアドレスをその人が持っている場合は、 , で区切って書きます。, の後に空白を入れても構いません。つまり、この空白は要素の区切りではありません。また、" で囲まれた空白も要素の区切りにはなりません。以下に例を示します。

     kazu    kazu@example.org, kazu@example.net    Kazu-kun  "Kazuhiko Yamamoto"

「個人情報」の書式では、各要素を省略できます。中間の要素を省略する場合は、 * と書いて下さい。以下に、アドレスに対してニックネームのみを定義する例を示します。

     *       kazu@example.org, kazu@example.net    Kazu-kun

ニックネームは Summary モードでのアドレスの置き換えと、Draft モードでの引用記号の置き換え(see cite)に利用されます。

アドレス帳のコメント文字は ; と # です。; は行頭にある場合のみコメントとなり、その行が無視されます。# は任意の場所でコメントとなり、そこから行末までが無視されます。また、\ は継続行を表わします。

Summary モードには、現在読んでいるメッセージの情報を Addrbook に登録する機能があります。展開規則を登録するには C-cC-a と押して下さい。以下に例を示します。

     #If you want to register this entry, type 'C-c C-c'.
     #If you want to NOT register this entry, type 'C-c C-q'.
     Shortname: kazu
     Addresses: kazu@example.org
     Comments:

個人情報を登録するには C-uC-cC-a と押して下さい。以下に例を示します。

     #If you want to register this entry, type C-c C-c.
     #If you want to NOT register this entry, type C-c C-q.
     Shortname: kazu
     Addresses: kazu@example.org
     Nickname:
     Name: Kazuhiko Yamamoto
     Comments:

必要であれば加筆訂正します。実際に登録するには C-cC-c、登録を取り止める場合は C-cC-q と入力して下さい。See Quit も参照して下さい。

なお、Addrbook に複数の言語の文字を使いたい場合は、以下の設定を Addrbook の先頭に記述して下さい。

     #-*-coding:ctext;-*-

アドレスの自動学習
=========

メッセージを送信した場合、To: と Cc: に書かれているアドレスは、自動的に学習されます。以下の例を考えて下さい。

     To: kazu@example.org

アドレスの補完(1)(see addr-comp1)の場合：このメッセージを送信すると、アドレス "kazu@example.org" に対し、短縮名 "kazu" が自動登録されます。ただし、すでに "kazu" という短縮名が自動登録されているなら、 mew-addrbook-override-by-newone の値に応じて上書きするかを決定します。nil なら古い設定を残し、それ以外なら上書きします。展開の際は、アドレス帳の方が優先されます。ですから、アドレス帳に無い短縮名のみが有効になります。

アドレスの補完(2)(see addr-comp2)の場合：このメッセージを送信すると、アドレス "kazu@example.org" が自動登録されます。

自動登録されるのは通常 2000 個(mew-lisp-max-length)のアドレスまでです。それを越えて登録するとアルファベット順で最後の方が消えます。これらの情報は Mew を終了する際に、"~/Mail/.mew-alias" に保存されます。

自動登録ですから、不要な短縮名も登録されます。不要な短縮名を削除するには、以下のようにするといいでしょう。まず、M-a を実行し、 "~/Mail/.mew-alias" を開きます。次に、テキストファイルを編集する要領で、不要な短縮名を削除します。そして、C-xC-s で保存して下さい。保存と同時に、その内容が Mew に反映されます。

アドレスの補完(1)とアドレスの補完(2)では、"~/Mail/.mew-alias" の書式が異なります。mew-use-full-alias の値を変え、方法を切り替えたら、 Summary モードで一回 Z を押して下さい。これで、書式が変換されます。

アドレスの補完(1)
==========

アドレスの補完(1)では、アドレス帳の展開規則、アドレス帳の個人情報、および送信時に学習されたアドレスで登録されたアドレスは、ユーザ名(短縮名)が一意であることが前提となっています。

たとえば、以下のように「展開規則」を設定したとします。

     pooh:           winnie-the-pooh@example.net

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

     To: piglet@example.org,
             poTAB

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

     To: piglet@example.org,
             poohTAB

もう一度 TAB を押すと "winnie-the-pooh@example.net" に展開されます。

     To: piglet@example.org,
             winnie-the-pooh@example.net

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

     pooh:           winnie-the-pooh@example.net
     pooh-pooh:      pooh-pooh@example.org

"pooh-" まで入力すれば、"pooh-pooh" まで補完できることは明らかです。しかし、"pooh" までだと、"pooh" を「展開」するのか、"pooh-pooh" まで補完するのか分りません。"pooh" を "winnie-the-pooh@example.net" に強制的に展開するには、以下のように @ を挿入し、TAB を押します。

     To: pooh@TAB

強制展開は、@ を挿入せず、M-C-e を押しても実行できます。

上記の説明は、送信時に学習されたアドレスにもあてはまります。

「個人情報」の書式では、アドレスが順に置き換えられていきます。以下の例を考えて下さい。

     kazu    kazu@example.org, kazu@example.net    Kazu-kun  "Kazuhiko Yamamoto"

kazu がどう変化するのか見てみましょう。

     To: kazuTAB

"kazu" の後で TAB を打つと、"kazu@example.org" に置き換わります。

     To: kazu@example.orgTAB

次に "kazu@example.org" の後で TAB を打つと、"kazu@example.net" に置き換わります。

     To: kazu@example.netTAB

さらに "kazu@example.net" の後で TAB を打つと、 "kazu@example.org" に戻ります。このように TAB を押すと、アドレスが循環的に置換されます。

アドレスを決定した後は、正式名称が付加できます。

     To: kazu@example.orgM-TAB

このように M-TAB を押すと、以下のように正式名称が付加されます。

     To: Kazuhiko Yamamoto <kazu@example.org>

アドレスの補完(2)
==========

アドレスの補完(2)では、学習されたアドレスに関しては、アドレス全体が補完の対象になります。アドレス帳の展開規則は、短縮名が補完の対象になり、一意に定まれば展開されます。アドレス帳の個人情報では、短縮名が補完の対象になり、一意に定まれば、登録されている先頭のアドレスに展開されます。

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

kazu@example.org を学習しているとしましょう。

     To: kaTAB

曖昧でないところまで入力し、TAB を押せば、アドレスが補完されます。

     To: kazu@example.org

さらに kazunori@example.jp を学習したとしましょう。kazu@example.org へ補完するには kazu@ まで、kazunori@example.jp へ補完するには kazun まで入力する必要があります。

展開規則と個人情報は、TAB により、まず短縮名が補完されます。短縮名が一意に定まれば、TAB で展開できます。

たとえば、以下のように「展開規則」を設定したとします。

     pooh:           winnie-the-pooh@example.net

短縮名 "pooh" を補完してみましょう。

     To: poTAB

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

     To: poohTAB

もう一度 TAB を押すと "winnie-the-pooh@example.net" に展開されます。

     To: winnie-the-pooh@example.net

問題は、短縮名が一意に定まらない場合の展開です。以下の展開規則を考えて下さい。

     pooh:           winnie-the-pooh@example.net
     pooh-pooh:      pooh-pooh@example.org

"pooh-" まで入力すれば、"pooh-pooh" まで補完できることは明らかです。しかし、"pooh" までだと、"pooh" を「展開」するのか、"pooh-pooh" まで補完するのか分りません。"pooh" を "winnie-the-pooh@example.net" に強制的に展開するには、M-C-e を利用します。(TAB で強制展開する方法はありません。)

     To: poohM-C-e

この例は、以下のように強制展開されます。

     To: winnie-the-pooh@example.net

メッセージの送信
========

メッセージを書き上げ、いよいよ送信するには、以下の 2 つのコマンドのどちらかを選んで下さい。

C-cC-m
     メッセージを作成し +queue または +postq に入れ、送信待ち状態にする。

C-cC-c
     メッセージを作成し送信する。"Really send this message? (y or n) " と訊かれる。y を押せば、送信される。

メッセージが送信される際にどう加工されるか説明します。以下のようなメッセージを考えて下さい。

     To: pooh
     Subject: 明日の日曜日
     From: Piglet <piglet@example.org>
     X-Mailer: Mew version 6.8 on Emacs 26.1
     ----
     明日の日曜日、遊びませんか？

     // ピグレット

たとえば、C-cC-m でこのメッセージを +queue あるいは +postq に入れると、メッセージは以下のように加工されています。

     Date: Mon, 13 Mar 2000 19:49:50 +0900 (JST)
     Message-Id: <20000313.194950.59499544.piglet@example.org>
     To: winnie-the-pooh@example.net
     Subject: =?iso-2022-jp?B?GyRCTEBGfCRORnxNS0Z8GyhC?=
     From: Piglet <piglet@example.org>
     X-Mailer: Mew version 6.8 on Emacs 26.1
     Mime-Version: 1.0
     Content-Type: Text/Plain; charset=iso-2022-jp
     Content-Transfer-Encoding: 7bit

     明日の日曜日、遊びませんか？

     // ピグレット

Date: や Message-Id: が付加されたのはお分かりになるでしょう。Subject: にあった日本語は、配送に安全となるよう ASCII コードに変換されています。また、本文のデータ型や文字コードが推測され、正しく付加されていることは特筆すべきでしょう。

C-cC-m や C-cC-c でメッセージを作成するとき、ヘッダに不備があった場合に注意を促してくれる機能があります。

mew-ask-subject を t にしておけば、Subject: が空のときに値を尋ねてくれます。空のままにしたい場合は単純に RET を押して下さい。この変数の初期値は nil です。

mew-ask-fcc を t にしておけば、Fcc: に存在しないフォルダが指定してある場合、そのフォルダを作成するか尋ねてくれます。作るなら y、作らないなら n を押して下さい。n を押すと、送信が中止され、カーソルは草稿に戻ります。この変数の初期値は nil です。

Mew は、サーバがユーザ認証を要求すると、送信のためのパスワードをユーザに訊きます。長い間、メールの送信にはパスワードが必要ありませんでした。これが、メールアドレスを詐称できる原因の一つとなっています。これからは、メールの送信の際は、受信のときと同じように、パスワードが必要な時代になります。

+queue に溜っているメッセージを送信するには、以下の 2 つの方法があります。どちらも Summary モードのコマンドであることに注意しましょう。

i
     mew-auto-flush-queue が t の場合は、メッセージを受信した後に、+queue にあるメッセージを送信する。ダイアルアップ環境において、接続料金を節約する意味でも、送信のための認証という意味でも、これはよい方法。 mew-auto-flush-queue の初期値は t。

C-cC-c
     +queue にあるメッセージを送信する。+queue に行って、できあがったメッセージを見た後に、このコマンドを使うと便利。mew-ask-flush-queue が t なら、"Flush queue? (y or n) " と訊かれる。 mew-ask-flush-queue の初期値は nil。

シグニチャと引用
========

ここでは、本文のテキストを便利に処理するコマンドについて述べます。

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

C-cTAB
     カーソルの位置に "~/.signature" を挿入する。

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

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

C-cC-y
     Message モードからメッセージの一部をコピーし、引用ラベルと引用記号付で貼り付ける。

      1. おおまかにいえば、Message モードの本文がコピーされる。たとえば、 Text/Plain が表示されていると、Message モード全体がコピーされる。 Message/Rfc822 が表示されている場合は、ヘッダを除いた本文がコピーされる。

      2. C-uC-cC-y では、ヘッダがあればヘッダをコピーする。

      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 モードに表示されているものならなんでも引用できます。つまり、複数のメッセージを簡単に引用できるのです。引用したいメッセージを表示させて、本文を引用する手順を、引用したいメッセージの回数だけ繰り返して下さい。そのための 3 分割です。

本文やヘッダの色付けがおかしくなった場合、C-cC-l を実行することで、色付けをやり直すことができます。

マルチパートの作成
=========

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

たとえば、+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/attach/1" です。パート 1 の CoverPage は本文を意味します。ここで Draft モードは次のようになっているでしょう。

     To: mew-dist
     Subject: ここがヘッダ
     From: Kazu Yamamoto <kazu@example.org>
     X-Mailer: Mew version 6.8 on Emacs 26.1
     ----
     本文だよ。

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

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

  * "----" より上を 「ヘッダ」

  * "----" から "attachments" までを「本文」

  * "attachments" より下を「添付領域」

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

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

ヘッダ
     さまざまな補完。

本文
     TAB の挿入。

添付領域
     なにもしない。

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

ヘッダ
     c を挿入。

本文
     c を挿入。

添付領域
     ファイルのコピー。

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

C-p
     現在のディレクトリの前のファイルへ移動。

C-n
     現在のディレクトリの後のファイルへ移動。

C-f
     1 番目のサブディレクトリに移動。

C-b
     親ディレクトリに移動。

c
     ファイルのコピー。"." 上で有効。ネットワーク経由でも可。リモートのファイルをコピーする場合は、"/[user@]hostname:/filepath" の形式でファイルを指定。

l
     ファイルへシンボッリクリンクを張る。"." 上で有効。添付ファイルを f を使って読み込んで編集する場合は、実体を編集してしまわないように、l ではなく c でコピーすべき。

d
     ファイルとディレクトリの消去。

m
     サブディレクトリ(つまりマルチパート)の作成。"." 上で有効。

f
     ファイルをバッファに読み込む。

F
     新規ファイルをバッファに読み込む。"." 上で有効。

y
     Message モードに表示されているメッセージにリンクを張る。"." 上で有効。

e
     external-body の入力。"." 上で有効。

a
     音をサンプリングしオーディオファイルとして挿入。"." 上で有効。

p
     入力されたユーザの PGP 公開鍵を取り出す。"." 上で有効。

D
     ちょっとした説明(Content-Description:)の入力。

T
     データ型(Content-Type:)の変更。

t
     データ型に関し、テキストとバイナリを反転させる。

I
     Text/* 型の入力 coding-system を指定する。

C
     Text/* 型の出力 coding-system を指定する。

P
     受信側でこのパートを保存する際のファイル名(Content-Disposition:)の変更。ファイル名の入力の際に、単に RET を押すと値が消える。そして、送信側のファイル名が * と共に表示される。

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

     .txt       Text/Plain
     .html      Text/Html
     .xml       Text/Xml
     .rtf       Text/Enriched
     .css       Text/Css
     .sgml      Text/Sgml
     [0-9]+     Message/Rfc822
     .ps        Application/Postscript
     .pdf       Application/Pdf
     .doc       Application/Msword
     .xls       Application/Vnd.Ms-Execl
     .ppt       Application/Vnd.Ms-Powerpoint
     .vsd       Application/Vnd.Visio
     .dat       Application/Ms-Tnef
     .tar|.tar.|.gz|.Z|.taz|.tgz|.bz2?|.lzh|.zip|.bin|.pgp|.gpg|.exe|.dll
                Application/Octet-Stream
     .gif       Image/Gif
     .tiff      Image/Tiff
     .jpe?g     Image/Jpeg
     .png       Image/Png
     .xwd       Image/X-Xwd
     .xbm       Image/X-Xbm
     .xpm       Image/X-Xpm
     .bmp       Image/X-Bmp
     .pcx       Image/X-Pcx
     .tga       Image/X-Tga
     .au        Audio/Basic
     .wav       Audio/X-Wav
     .aif?f     Auido/X-Aiff
     .midi?     Auido/X-Midi
     .mpga|.mp[23]  Audio/X-Mpeg
     .mpe?g     Video/Mpeg
     .mov       Video/Quicktime
     .avi       Video/X-Msvideo

コピーするときのファイル名は、適切なデータ型を推測できるよう拡張子に気を付ければなんでもよいです。もし、該当する拡張子がない場合、 mew-content-type で指定されるデータ型が選ばれます。初期値は、 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-Type:)は T によって変えられます。データ型がテキスト(Text/Plain)かバイナリ(Application/Octet-Stream)の場合は、t によって一方を他方へ反転できます。

マーク(Content-Transfer-Encoding:)を変更する方法は、see mark-b-comp を参照して下さい。説明(Content-Description:)は D で入力できます。この説明のカラムは、see mark-b-comp で説明する暗号化の際に上書きされます。

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

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

ディレクトリに対するデータ型の初期値は、一般的なマルチパート (Multipart/Mixed)です。これも T によって変更できます。

お好みのマルチパートが作成できたら、前節で述べたように C-cC-m か C-cC-c を利用してメッセージを送信して下さい。

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

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

文字コードの決定
========

Mew はシングルパートとマルチパートの両方に対し、配送時の文字コードを決定する機能を持っています。

<シングルパート>

Draft モードで C-cC-m や C-cC-c と入力しメッセージを作成すると、Mew は本文の内部表現から配送時の文字コードを決定します。バイリンガル Emacs では、7 ビットの文字コードに対し US-ASCII を選び、8 ビットの文字コードに対し ISO-8859-1 を選択します。国際化 Emacs では、内部表現から Mew が定めた規則に従って、配送時の文字コードを決定します。

<マルチパート>

マルチパートの一部として添付するデータは、ファイルですからディスク上に存在します。そこで、メッセージの作成の際に、配送時の文字コードを決定するためには、まず Emacs のバッファに取り込み、内部表現に直す必要があります。内部表現に直した後は、シングルパートと同様の方法で、配送時の文字コードを決定します。

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

国際化 Emacs では、Mew は環境(つまり auto conversion)に従って、文字コードを推測しながらファイルを読み込みます。国際化 Emacs でこの環境を決定するコマンドは、C-x RET l です。

たとえば、日本語の環境では、国際化 Emacs は ISO-2022-JP、EUC-JP、そして、 Shift_JIS を見事に推測し、日本語用の内部表現に変換してバッファに格納します。Mew はこの内部表現から、配送時の文字コードとして ISO-2022-JP を選択します。つまり、ファイルの文字コードが EUC-JP や Shift-JIS であっても、配送用の ISO-2022-JP に自動的に変換されます。そこでユーザは、添付するファイルの文字コードを気にすることなしに、ファイルを添付可能です。

もし、ディスク上のファイルの coding-system を明示的に指定したいなら I を使って下さい。これを入力文字コードと呼ぶことにします。また、配送時の coding-system を明示的に指示したいなら、C を利用して下さい。

文字コードの情報は、添付領域において、丸括弧の内側に表示されます。もし、配送時の文字コードが明示的に指定されていれば、それが表示されます。そうでなくて、入力文字コードが明示的に指定されていれば、それが "*" と共に表示されます。そうでなければ、"guess" と表示されます。

以下の例の見て下さい。パート 1 は、本文ですからあらかじめバッファ内にあります。"guess" と表示されていますから、配送時の文字コードを Mew が定めた規則に従って決定します。

パート 2 は、入力文字コードとして iso-8859-1 が指定されていますので、ファイルの文字コードを iso-8859-1 であるとして読み込み、内部表現に変換します。配送時の文字コードは Mew が定めた規則に従って決定します。

パート 3 の入力文字コードは、この例だけからだと明示的に指定されているか分かりません。(しかし、ユーザ自身はは実際に指定したか分かっているはずです。) とにかく、ファイルは内部表現に直され、配送時の文字コードに指定されている EUC-JP に変換されます。

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

バイリンガル Emacs では C と I は利用できません。

長い行の取り扱い
========

長い間、メッセージに書く文章は、自分自身で各行を(英文字で)70文字程度に折り返すべきだとされてきました。RFC 3676 で Text/Plain が拡張され、 format パラメータに flowed という値が定義されました。

このおかげで、送り側で長い行を目印を付けて折り返し、受け取り側で長い行に戻せるようになりました。ユーザの目から見れば、メッセージに長い行を気軽に書いてもよくなったということです。

Mew で、長い行を flowed で折り返すには 2 つの方法があります。

1) 明示的に折り返すには、C-cC-fを実行します。

このコマンドは、草稿に長い行があるかを調べます。 mew-flowed-fold-threshold を越える行が見つかったら、flowed で折り返しを実行します。この変数の値は 78 です。

折り返した行が、何文字以内になるかを制御する変数が mew-flowed-fold-lengthです。初期値は 70 です。

折り返す方法は、文字コードによって変わります。分かち書きをする文字コードでは、既存の空白文字の後に改行文字を入れて折り返します(delsp=no)。分かち書きをしない文字コードでは、適切な場所に空白文字と改行文字の両方を挿入して折り返します(delsp=yes)。

もう一度 C-cC-f を実行すると、折り返された行が元に戻ります。

2) mew-use-format-flowed が t の場合は、C-cC-cや C-cC-mでメッセージを作成するときに、この機能が働きます。この変数の初期値は nil です。

3) C-cC-pC-f で、mew-use-format-flowed の値を反転できます。

なお、メッセージを表示する際は、mew-use-format-flowed の値に関係なく flowed で折り返された行は、元に戻されます。長い行が見にくい場合は、 Summary モードで _ を利用しましょう。

mew-flowed-auto-wrap が t の場合、メッセージを表示すると、元に戻された行に一回 _ が実行され、折り返された状態で表示されます。mew-flowed-auto-wrap のデフォルトの値は t です。

メッセージへの返答と宛先の決定
===============

新規にメッセージを書く場合は、To:、Cc:、および Newsgroups: を自分で書くことになります。一方 Summary モードで a や A を使って、あるメッセージに返答しようとすると、To:、Cc:、Newsgroups: は自動的に用意されます。

Summary モードで a や A を使うと、新しい草稿が Draft mode に用意されます。To:、Cc:、Newsgroups: の値は、以下の三つの alist に従って用意されます。

 1. もし C-u 付きで呼び出された場合、送信者/投稿者のみに返答する。この場合、mew-reply-sender-alist が利用される。

 2. もし対象が自分自身で送ったメッセージなら、そのヘッダを加工せずに返答したいのであろう。この場合、mew-reply-fromme-alist が利用される。

 3. そうでなければ、すべての人に返答する。この場合、 mew-reply-all-alist が利用される。

mew-reply-sender-alist の初期値は以下の通りです。

     '(("Reply-To:"
        ("To:" "Reply-To:" "From:"))
       (t
        ("To:" "From:")))

これは、次のように解釈します。

 1. Reply-To: が存在すれば、Reply-To: と From: の値を新しい To: へコピーする。

 2. そうでなければ、From: の値を新しい To: へコピーする。

もし、Reply-To: で指定されたアドレスのみに返答したい場合は、 mew-reply-sender-alist を以下のように設定するとよいでしょう。

     (setq mew-reply-sender-alist
           '(("Reply-To:"
              ("To:" "Reply-To:"))
             (t
              ("To:" "From:"))))

mew-reply-fromme-alist の初期値は以下の通りです。

     '((t
        ("To:" "To:")
        ("Cc:" "Cc:")
        ("Newsgroups:" "Newsgroups:"))))

これは、次のように解釈します。

 1. To: の値を新しい To: へ、 Cc: の値を新しい Cc: へ、 Newsgroups: の値を新しい Newsgroups: へコピーする。

mew-reply-all-alist の初期値は以下の通りです。

     '((("Followup-To:" "poster")
        ("To:" "From:"))
       ("Followup-To:"
        ("Newsgroups:" "Followup-To:" "Newsgroups:"))
       ("Newsgroups:"
        ("Newsgroups:" "Newsgroups:"))
       ("Reply-To:"
        ("To:" "Reply-To:" "From:")
        ("Cc:" "To:" "Cc:" "Apparently-To:"))
       (t
        ("To:" "From:")
        ("Cc:" "To:" "Cc:" "Apparently-To:")))

これは、次のように解釈します。

 1. Follwup-To: の値が "poster" であれば、From: の値を新しい To: へコピーする。

 2. Follwup-To: が存在すれば、Follwup-To: と Newsgroups: の値を新しい Newsgroups: へコピーする。

 3. Newsgroups: が存在すれば、Newsgroups: の値を新しい Newsgroups: へコピーする。

 4. Reply-To: が存在すれば、Reply-To: と From: の値を新しい To: へコピーする。また、To:、Cc:、Apparently-To: の値を新しい Cc: へコピーする。

 5. そうでなければ、From: の値を新しい To: へコピーする。また、To:、Cc:、 Apparently-To: の値を新しい Cc: へコピーする。

mew-reply-all-alist を以下のように設定したいと思う人もいるかもしれません。

     (setq mew-reply-all-alist
           '((("Followup-To:" "poster")
              ("To:" "From:"))
             ("Followup-To:"
              ("Newsgroups:" "Followup-To:"))
             ("Newsgroups:"
              ("Newsgroups:" "Newsgroups:"))
             ("Reply-To:"
              ("To:" "Reply-To:"))
             (t
              ("To:" "From:")
              ("Cc:" "To:" "Cc:" "Apparently-To:"))))

あるアドレスが複数ある場合は、自動的に 1 つになります。また、匿名の宛先を表す ":;" で終るアドレスも、自動的に消去されます。

自分のアドレスは自動的に消去されます。自分のアドレスは、 mew-config-alist などから mew-mail-address-list に自動設定されます。この値が気に入らないなら、以下のように明示的に設定することも可能です。

     (setq mew-mail-address-list
            '("^pooh@[a-z]*.example.org$"
              "^pooh@example.net$"
              "^winnie@example.jp$"))

メッセージの転送
========

メッセージを転送するには、Summary モードで f や F を利用します。すると、Draft モードに移行し、あらかじめメッセージが添付領域に添付された草稿が準備されます。

また Draft モードで添付領域を用意し、メッセージをコピー(c)したりメッセージにリンク(l)を張ったりしても、メッセージを転送できます。ファイル名が数字([0-9]+)の場合は、自動的にメッセージだと判断されます。また、添付領域で y を使うと、Message モードに表示しているメッセージにリンクを張るので便利です。

通常は添付したメッセージの全体が転送されます。もし、ヘッダの一部を削りたい場合は、mew-field-delete-for-forwarding を定義して下さい。以下に "Received:" と "Return-Path:" を転送時に削るための設定例を示します。

     (setq mew-field-delete-for-forwarding '("Received:" "Return-Path:"))

メッセージの再送
========

メッセージのヘッダの一部のみを変更して、送信したい場合があります。

たとえば、同じ内容のメッセージを、複数の宛先に独立して送りたい場合です。 pooh 宛のメッセージを作成して、+queue に入れ、すぐさまそのメッセージをコピーし、宛先だけを piglet に変更したい場合を想像して下さい。これを、メッセージの再利用による送信と呼びましょう。

また、メッセージに Resent-To: というフィールドを付けて再送したいこともあります。これは、転送の一種です。こちらはヘッダだけ書き直すので、ヘッダ変換といいます。前節で説明した転送は、メッセージを新規のメッセージに包み込んで転送するため、カプセル化と呼ばれています。

ヘッダの一部だけを編集し、メッセージを送信したり、キューに入れたりするモードとして、Header モードが用意されています。本文が編集できない Draft モードだと思えばいいでしょう。

Header モードに入るために、Summary モードには以下のコマンドが用意されています。

W
     メッセージの再利用による送信。対象となるメッセージの To:、Cc:、From: などを書き換えるために、Header モードに移行する。典型的には、+queue または +postq に入っているメッセージに対して利用する。

r
     メッセージの再送。対象となるメッセージのヘッダに、Resent-To:、Resent-Cc:、 Resent-From: などを追加するために、Header モードに移行する。再送によるメッセージの転送は、受信者を混乱させることがあるので、よく考えてから利用すること。

Header モードでは、Draft モードのように、補完や循環的な補完が利用できます。ヘッダの入力が終わったら、以下のどちらかのコマンドを用いて、メッセージを送信して下さい。本文が表示されていないので不安かもしれませんが、ちゃんと対象となっているメッセージの本文とヘッダの一部が再利用されます。

C-cC-m
     メッセージを作成し +queue または +postq に入れ、送信待ち状態にする。

C-cC-c
     メッセージを作成し送信する。"Really send this message? (y or n) " と訊かれる。y を押せば送信される。

電子署名/暗号メールを作成する
===============

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

C-cC-s
     草稿全体を署名する。パスフレーズを入力すること。

C-cC-e
     草稿全体を暗号化する。

C-cC-b
     草稿全体を署名後暗号化する。パスフレーズを入力すること。

C-cC-r
     草稿全体を暗号化後署名する。パスフレーズを入力すること。

メッセージを暗号化するには受信者の公開鍵を使用します。逆に署名するには自分の秘密鍵を使います。よって、署名するためにはパスフレーズを入力する必要があります。ただし、パスフレーズの保存機能やマスターパスワードを使っており、パスフレーズが保存されている場合は、パスフレーズを入力する必要はありません(see password)。

これらのコマンドは、通常 PGP/MIME を作成します。S/MIME を作成したい場合は、以下のように設定して下さい。

     (setq mew-draft-privacy-method 'smime)

この変数の値は、Draft モードの C-cC-pC-m でも変更できます。

上記4つのコマンドは、次節で説明するマークを使った作成方法の省略方法に当たります。

メッセージに署名を施すには、C-cC-s と入力します。署名の際には、自分の秘密鍵を復号化する必要がありますので、パスフレーズがキャッシュされていなければ、入力を促されます。署名が施されたメッセージは、+queue または +postq に格納されます。

自分の秘密鍵は、From: にあるアドレスを元に特定されます。From: がない場合は、デフォルトの秘密鍵が選択されます。From: にあるアドレスとは違うアドレスで秘密鍵を指定したい場合は、C-uC-cC-s と入力して下さい。

メッセージを暗号化するには、C-cC-e とタイプして下さい。To: や Cc: からアドレスを切り出して、その受信者が復号化できるよう暗号化します。暗号化するだけのなので、パスフレーズを訊かれることはありません。作成されたメッセージは、+queue に格納されます。

このメッセージは、受信者の公開鍵に加えて、自分の公開鍵でも暗号化されています。ですから、作成したメッセージを復号化できます。たとえば、g で +queue に移動し、念のため復号化して確認することが可能です。

署名後暗号化するには、C-cC-b と入力します。暗号化後署名するには、 C-cC-r とタイプします。どちらの場合も作成されたメッセージは、 +queue に蓄えられます。

署名を施したり、暗号化したりしてメッセージを送ろうと思っていても、うっかり忘れることがあります。これを防ぐために、メッセージを作成するコマンド C-cC-m や C-cC-c を実行すると、自動的に署名や暗号化を施す機能があります。

作成するすべてのメッセージのプライバシを保護したいなら、 mew-protect-privacy-always を t にして、 mew-protect-privacy-always-type に利用したいサービスを設定します。

暗号化されたメッセージに対する返答メッセージのプライバシを保護したいなら、 mew-protect-privacy-encrypted を t にして、 mew-protect-privacy-encrypted-type に利用したいサービスを設定します。この設定は、暗号化されたメッセージへの返答する場合、上記のすべてのメールに対する設定よりも優先されます。

以下に利用できるサービスを示します。かっこ内はそれぞれのサービスを表すシンボルです。C-cC-m や C-cC-c と入力する際に利用されるサービスは、モードラインに表示されます。

pgp-signature (PS)
     PGP で署名

pgp-encryption (PE)
     PGP で暗号化

pgp-signature-encryption (PSPE)
     PGP で署名後暗号化

pgp-encryption-signature (PEPS)
     PGP で暗号化後署名

smime-signature (SS)
     S/MIME で署名

smime-encryption (SE)
     S/MIME で暗号化

smime-signature-encryption (SSSE)
     S/MIME で署名後暗号化

smime-encryption-signature (SESS)
     S/MIME で暗号化後署名

以下の例は、すべてのメッセージに対し署名する設定です。

     (setq mew-protect-privacy-always t)
     (setq mew-protect-privacy-always-type 'pgp-signature)

以下の例は、暗号化されたメッセージへの返答メッセージに対し、PGP で暗号化する設定です。

     (setq mew-protect-privacy-encrypted t)
     (setq mew-protect-privacy-encrypted-type 'pgp-encryption)

Draft モードでは、C-cC-pC-a で mew-protect-privacy-always、 C-cC-pC-e で mew-protect-privacy-encrypted の値を反転できます。

Draft モードにおいて現在書いている草稿に対してのみあらかじめサービスを指定しておき、送信時にサービスを施すことを忘れないようにできます。現在の草稿に対し C-cC-m や C-cC-c で施されるサービスを指定するには、 C-cC-pC-d に続いて上記のサービスの 1 つを入力して下さい。現在のサービスをキャンセルするには、サービス名の代りに単に RET を押して下さい。

C-cC-c や C-cC-m でメッセージを作成する際、署名や暗号化に失敗したら、草稿に戻ります。このとき指定していたサービスはキャンセルされます。続けて C-cC-c や C-cC-m でメッセージを作成すると、普通のメッセージが作成されるので気をつけて下さい。問題を取り除いた後、同じサービスを望むなら、明示的に C-cC-pC-d でサービスを指定するか、 C-cC-s、C-cC-e などを用いて下さい。

mew-use-old-pgp を t に設定すれば(初期値は nil)、 C-cC-s や C-cC-e は PGP/MIME の代りに、古い PGP の書式に従ってメッセージを生成します。添付領域がある場合は、エラーになります。

上記で説明した mew-protect-privacy-* は、PGP/MIME のみに有効であり、古い PGP には機能しません。C-cC-m や C-cC-c で常に古い PGP の署名を施すには、mew-protect-privacy-with-old-pgp-signature を t にして下さい。

PGP/MIME や S/MIME のために Mew は GnuPG 1.x と 2.0 をサポートしていますが、 2.1 はサポートしていません。

マークを使った電子署名/暗号メールの作成
====================

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

     ----------------------------- 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)、署名、暗号化などがあります。

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

" "
     符号化しない。ただし、8 ビットのテキストは符号化されるかもしれない。

B
     Base64

Q
     Quoted-Printable

G
     Gzip64(gzip 圧縮し Base64 で符号化する。Mew が実験的に採用している。相手が Mew を使っていない場合は、使用すべきではない。)

PS
     PGP で電子署名。

PE
     PGP で暗号化。

SS
     S/MIME で電子署名。

SE
     S/MIME で暗号化。

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

B
     Base64 で符号化するため B マークを付ける。

Q
     Quoted-Printable で符号化するため Q マークを付ける。

G
     Gzip64 で符号化するため G マークを付ける。ただし、Text/Plain と Application/Postscript でしか実行できない。これ以外の型には圧縮は無意味である。なぜなら、jpeg などはあらかじめ圧縮されているから。

S
     PGP で署名するため PS マークを付ける。

E
     PGP で暗号化するため PE マークを付ける。受信者のアドレスを入力する。

M-s
     S/MIME で署名するため SS マークを付ける。

M-e
     S/MIME で暗号化するため SE マークを付ける。受信者のアドレスを入力する。

Z
     ZIP で直ちに暗号化する。暗号化された後は、Bマークが付く。

U
     符号化を元に戻す。元々のマークに戻る。

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

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

マークを付けた後は、C-cC-m や C-cC-c を使って、メッセージを作成して下さい。

PGP の鍵の配布
=========

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

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

宛先を匿名にしたメッセージの送信
================

宛先を匿名にして、複数の受信者にメッセージを送信したいことがあります。

たとえば、pooh がパーティーへのお誘いを複数の友達に送ることを考えて下さい。パーティーへ参加するという piglet からの返事は、pooh のみに送るべきです。しかし、To: にたくさんの友達を列挙していると、piglet は誤って多くの人に返答を送りつけてしまうかもしれません。そもそも、pooh は誰を誘ったのか、当日までふせておきたいこともあるでしょう。

このような要望を実現するために、Mew では匿名の宛先として、":;" を利用します。以下の例を見て下さい。

     To: party:piglet@example.org,roo@example.org;
     From: Pooh <winnie-the-pooh@example.net>

"party" という説明文字列の後に ":" があります。そして、いくつかアドレスが "," で区切られながら列挙され、";" で終端されています。このような形式でアドレスを書くと、Mew は ":" と ";" のアドレスにメッセージを届けますが、ヘッダからは削り取ります。この例では、piglet と roo は以下のようなメッセージを受け取ります。

     To: party:;
     From: Pooh <winnie-the-pooh@example.net>

受信者はこのヘッダから、送信者は pooh であることは分かりますが、自分以外の誰に送られたのかは、想像するほかありません。また、"party:;" という文字列は、アドレスではありませんから、ここに返答することも不可能です。

なお、To: や Cc: にたくさんのアドレスを列挙することは、本質的によいことではありません。特定の人にメッセージを何度も送信する機会があるなら、通常メーリングリストを作成します。

愉快なマークたち
********

ここでは、Summary モードでユーザが付けたり消したりできるマークについて説明します。このマークは以下のように、行頭に付きます。(Mew が付けるマークは日付の左に付くことに注意。)

     D 03/12 Hidenori Ohta  今週末                    |日曜にストーンマジック
     oM03/14 ももちゃん     能登の写真                |この前撮った写真を添付
     * 03/15 Neat Sumikawa  Re: ワイン                |じゃぁ、水曜日に例の店

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

U
     未読マーク。

D
     消去のマーク。

X
     消去のマーク。

o
     整頓、つまり、フォルダを移動させるマーク。

*
     処理の対象とするマーク。

$
     マークを一時的に待避するためのマーク。

マークを付けるだけでは、メッセージがなくなったりすることはありません。 o、D、X といったマークを実際に処理するコマンドは、 x です。マークを付けるのは気軽にできますが、x を押すときは慎重にお願いします。

以下それぞれについて説明します。また、Mew が表示するマークについてもまとめます。

未読 U
====

以下のように設定すると、メッセージを一覧表示する際に、未読マーク U がメッセージに付きます。

     (setq mew-use-unread-mark t)

SPC、n、および p などでメッセージを読むと U マークは消えます。

この三つのコマンドは、通常 * マーク、U マーク、およびマークの付いていないメッセージを読み進みます。zSPC を押すと、これらは * マークと U マークの付いたメッセージのみを読み進めます。これは、未読のメッセージを読み進める場合に便利です。もう一度 zSPC を実行すると、対象とするメッセージが元に戻ります。

前のメッセージにマークを付けて、現在のメッセージに移動して来ると、 U マークは消えます。SPC、n、および p で移動して来た場合は、このメッセージを読むことを意図しているはずですが、マークを付けることで移動した場合はメッセージを読むことを意図していないかもしれません。その場合、U マークが消えると少し不便です。マークを付けることで移動した際に、U マークを消したくないのであれば、以下のように設定するとよいでしょう。

     (setq mew-delete-unread-mark-by-mark nil)

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

zSPC
     SPC、n、および p が読み進める対象とするメッセージを反転させる。反転とは、「U マーク、* マーク、およびマークなし」と「U マークおよび * マーク」に対し、一方を他方へ変えること。

M-u
     U マークを付ける。

消去 D、X
======

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

ローカル・フォルダのためのゴミ箱は +trash です。IMAP のためのゴミ箱は、 %trash です。

ゴミ箱の中のメッセージを実際に消去するには、以下の 2 つの方法があります。

 1. Summary モードで D を実行する。

 2. ゴミ箱で D マークを付けて、x を押す。

もう少し正確に言うと、ローカル・フォルダでは以下のルールが適用されます。 (mew-trash-folder の初期値は +trash。 mew-trash-folder-list の初期値は nil。)

  - mew-trash-folder が nil なら、D マークの付いたメッセージは消去される。

  - mew-trash-folder-list が定義されていたら、それらのフォルダで D マークを付けたメッセージは消去される。それ以外のフォルダからは mew-trash-folder へ。

  - mew-trash-folder-list が nil なら、 mew-trash-folder で D マークを付けたメッセージは消去される。それ以外のフォルダからは mew-trash-folder へ。(これが初期値。)

IMAP に対しては、mew-imap-trash-folder と mew-imap-trash-folder-list に従って、同じ規則が適用されます。

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

また、Md を使うと、現在のフォルダ内で同じ Message-Id: を持つメッセージがある場合、1 つを残して他のメッセージに D が付きます。

D マークに似たものに X マークがあります。このマークの付けられたメッセージは、x を押した際に必ず消去されます。X マークは、M-d で付けることができます。

mxM-d で、X マークが付いたメッセージだけを処理できます。すべての * マークを X マークに変換するコマンドは、 mM-d です。

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

d
     D マークを付ける。

M-d
     X マークを付ける。

md
     * マークを D マークへ変換する。

mM-d
     * マークを X マークへ変換する。

x
     マークの付いたメッセージを処理する。

mxd
     D マークの付いたメッセージのみを処理する。

mxM-d
     X マークの付いたメッセージのみを消去する。

D
     ゴミ箱の中のメッセージを全部消去する。

C-uD
     指定されたフォルダのメッセージを全部消去する。

整頓 o
====

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

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

複数のフォルダを指定し、移動させたときのことを考えましょう。ハードリンクの機能を持つファイルシステムを使っている場合、そのメッセージは最初のフォルダに移動され、その他のフォルダからはハードリンクが張られます。そうでないファイルシステムの場合は、最初のフォルダに移動後、その他のフォルダへ複製されます。

指定したフォルダが 1 つで、しかもそれが現在のフォルダである場合、整頓してもなにも起こりません。指定したフォルダが複数で、現在のフォルダが含まれる場合、現在のフォルダ内での番号を保ったまま、その他のフォルダからハードリンクが張られるか、その他のフォルダへ複製されます。

o に似ていますが、かならず現在のフォルダも候補として提示する c というコマンドも用意されています。

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

o
     o マークを付ける。

c
     o マークを付ける。推測したフォルダに加えて、現在のフォルダも候補として提示する。

x
     o マークの付いたメッセージを移動させる。

mxo
     o マークの付いたメッセージのみを移動させる。他のマークは処理しない。

C-umxo
     o マークの付いたメッセージの中で、現在のメッセージと同じ移動先を持つもののみを移動させる。

対象 *
====

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

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

*
     * マークを付ける。

N
     下方向の * マークの付いたメッセージへ移動し表示。

P
     上方向の * マークの付いたメッセージへ移動し表示。

ma
     マークの付いていないメッセージすべてに * マークを付ける。

mr
     入力した正規表現にマッチしたメッセージに * マークを付ける。

* マークは、複数のメッセージを処理するためにも利用します。以下に複数のメッセージを処理するコマンドを示します。

F
     * マークの付いたメッセージを MIME 形式で転送するための草稿を準備。

J
     大きなメッセージは Message/Partial として複数に分割されている場合がある。これらのメッセージには、Mew によって P マークが付けられている。ここで、ユーザがそれらのメッセージに * マークを付け、このコマンドを実行すれば、元のメッセージが復元される。

mI
     * マークの付いている一部だけが取得されたメッセージ群(T)を取得する。

C-umI
     mI を実行する。

M-b
     * マークの付いたメッセージに格納されているメッセージを取り出す。

M-\
     * マークの付いたメッセージを引数として、外部コマンドを起動する。

M-t
     * マークの付いたメッセージを "uudecode" する。

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

待避 $
====

たとえば / などを使いパターンに合致したメッセージに * を付けることを考えて下さい。* マークの付いたメッセージがすでにあるなら、これらのメッセージは / の結果と混ざってしまいます。そこで、現在の * マークを一時的に保存したくなります。

この目的のために、待避マーク $ が提供されています。典型的な使い方は、以下のようになります。

 1. m$ で * マークを一旦 $ マークに待避

 2. / などで * マークを付け、* マークのついたメッセージを処理

 3. U* で * マークを消去

 4. m* で $ マークを * マークへ戻す

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

m$
     * マークを $ マークへ変換。

m*
     $ マークを * マークへ変換。

マークの消去
======

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

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

u
     現在のメッセージのマークを消す。

U
     入力したマークが付いているすべてのメッセージのマークを消す。

$ マークを使って * マークを待避し、なんらかの操作をし、元に戻す方法は、目に見えるので分りやすいです。しかしながら、$ マークが付いているメッセージは、マークが付いているので目的の操作の対象外になるかもしれません。

このため U* で消去した * マークを復活させるコマンドがあります。それは、M* です。この方法は、復活できるマークは目に見えないので分りにくいかもしれません。しかしながら、マークが消えているので、そのメッセージは確実に目的の操作の対象になります。

M*
     一番最後の U* で消した * マークを復活させる。

マークの変換
======

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

マークを強い順に示します。

o、D、X
     新たにマークしたときは、次のメッセージを表示。上書きした場合は、その行に留まる。

* と $
     マークを付けた後は、その行に留まる。

U
     マークを付けた後は、その行に留まる。

強いマークを付けた後にカーソルが動く方向については、see summary-mode を参照して下さい。

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

m$
     * -> $ :: * マークを一時的に保存。

m*
     $ -> * :: * マークを元に戻す。

ms
     $ <-> *

mM-u
     * -> U :: 選択コマンド ? で選んだメッセージを未読にするときに便利。

md
     * -> D :: 選択コマンド ? で選んだメッセージを消去するときに便利。

mM-d
     * -> X :: 選択コマンド ? で選んだメッセージを消去するときに便利。

mo
     * -> o :: 選択コマンド ? で選んだメッセージをあるフォルダに移動させる場合に便利。

mc
     * -> o :: 選択コマンド ? で選んだメッセージをあるフォルダにコピーする場合に便利。

e
     最初に入力したマークを次に入力したマークへ変換する。ただし、o マークは対象外。

IMAP サーバとのマークの整合性
=================

Mew では、以下のマークに対し、IMAP サーバと整合性を確保できます。

U
     メッセージを読んだか否か。IMAP のフラグは \Seen。通常は %inbox のみで有効。

*
     注目しているメッセージ。IMAP のフラグは \Flagged。

オフラインの操作を許すために、Mew ではユーザが動作を起こすたびに IMAP サーバとマークの整合性を取ります。定期的に整合性を取ることはしません。 Mew がマークの整合性を取る方法を以下に示します。

 1. s + 'update

       - 既存のメッセージに対して変更したマークをサーバ側へ反映

       - 新着メッセージに対しては、サーバ側のフラグをマークへ反映

 2. x

       - 既存のメッセージに対して変更したマークをサーバ側へ反映

 3. s + 'sync

       - 既存のメッセージに対して変更したマークをサーバ側へ反映

       - 既存のメッセージの *,U, $,   マークを一旦クリア

       - サーバ側のフラグを既存のメッセージにマークとして反映

       - サーバ側で削除されたメッセージを削除

IMAP のためのマークのオフライン処理
====================

IMAP ユーザは、フォルダ A のメッセージをキャッシュし、出先で o マークや D マークを付け、その場でそれらのマークを処理したくなることがあります。この場合、その後ネットワークに接続したときに、それらの処理が IMAP サーバに反映されて欲しいと思います。

通常 IMAP では、メッセージをフォルダ A からフォルダ B へ移動させた場合、フォルダ A にキャッシュされているそのメッセージを削除し、IMAP サーバからネットワークを通じ、フォルダ B へそのメッセージをキャッシュし直す必要があります。なぜなら、フォルダ A にキャッシュされているメッセージに付随する IMAP の情報は、フォルダ A 内でのみ有効だからです。

出先でフォルダ A のメッセージをフォルダ B へ整理したとしましょう。仮に、そのメッセージをフォルダ B で読むためには、ネットワークに接続してその処理を IMAP サーバに反映し、IMAP サーバから取り直さないといけないとすると不便です。欲を言えば、出先でフォルダ B へ整理したメッセージは、IMAP サーバから取り直さなくとも、フォルダ B へ移動すれば読めるようになっていて欲しいと思います。

Mew では、メッセージ処理を後から IMAP サーバへ反映することと、IMAP サーバからメッセージを再取得しなくても移動先のフォルダでメッセージを読めることの両方を実現しています。ネットワークに接続していない状況で、マークを処理するには、lx を使用して下さい。lx を実行すると、以下の処理がなされます。

 1. o マークや D マークのついたメッセージがフォルダ A からなくなる。

 2. この処理はメッセージ形式で、%queue に溜る。

 3. o マークのついたメッセージは、ローカルでフォルダ B へ移動され、無効なメッセージとして扱われる。

無効なメッセージとは、読むことはできるが、o マークや D マークをつけられないものをいいます。無効なメッセージには、# マークが付いています。g を使って、フォルダ B へ行くと、無効なメッセージの一覧が自動的に表示されます。

ネットワークに接続した後に、%queue に溜っている処理を IMAP サーバに反映させるには、%queue で C-cC-c と入力して下さい。

IMAP サーバに処理を反映した後に、フォルダ B で s を押すと、無効なメッセージが削除され、有効なメッセージがキャッシュされます。

Mew が表示するマーク
============

以下に Mew が表示するマークをまとめます。

M
     マルチパートを表すマーク。See multipart を参照のこと。

-
     Multipart/Alternative を表すマーク。See analysis を参照のこと。

T
     メッセージが切り詰められたことを表すマーク。See retrieving を参照のこと。

S
     署名を表すマーク。See cipher-viewing を参照のこと。

E
     暗号化を表すマーク。See cipher-viewing を参照のこと。

P
     分割されていることを示すマーク。See target mark を参照のこと。

#
     メッセージが無効であることを示すマーク。See off-line を参照のこと。

楽々整理整頓
******

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

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

もし、() の中の初期値が自分の希望通りであれば、RET を押すだけでよいのです。整頓先が決定しているメッセージには、o マークが付きます。

メッセージを移動できるのは、そのメッセージが属している「世界」の中でのみです。前述のように世界はケースと修飾子によって定まります。整頓先のフォルダを指定する場合には、ケースを付けず、同じ修飾子を持つフォルダ名を入力する必要があります。ケースを付けない理由は、そのメッセージのケースはすでに定まっているからです。ミニバッファからフォルダ名を入力する際、ケースが "default" でないにも関わらずケースを明示的に入力しないのは、整頓先を指定する場合のみです。

o に似たコマンドに c があります。両者の違いは、 see refile mark を参照して下さい。

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

メーリングリスト用のフォルダから推測
==================

あるメーリングリスト宛のメッセージを、そのメーリングリスト名のフォルダに整理することは多いと思います。Mew ではメーリングリスト宛に届いたメッセージに対して、それ用のフォルダを推測する機能があります。

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

     To: pooh-lovers@example.org

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

さて、鋭い人は次のように個人のアドレスが To: や Cc: にある場合、困るのではないかと思うでしょう。

     To: piglet@example.org
     Cc: pooh-lovers@example.org

たとえば、pooh は pooh-lovers の一員ですから、このメッセージが届きます。しかし、piglet と仲がいいので、+from/piglet にマッチしてしまいます。

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

候補が決定できたら

     Folder name (+misc/pooh-lovers): +

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

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

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

もし、フォルダ名に大文字を使っていないなら、以下の設定により、この関数が高速になります。

     (setq mew-use-fast-refile t)

デフォルトでは、末端のフォルダと中間のフォルダが候補の対象となっています。もし、中間のフォルダではなく、末端のフォルダだけを選びたい場合は、以下のように設定して下さい。

     (setq mew-use-node-folder nil)

指定した規則から推測
==========

フォルダ名から推測する機能だけでは、思うようなフォルダを推測してくれない場合があります。たとえば、To: が staff@example.jp であるメッセージと To: が staff@example.net であるメッセージに対し、フォルダ名からの推測では同じフォルダ(たとえば、"+net/staff")が選ばれてしまいます。そこで、 Mew では、変数 mew-refile-guess-alist に明示的に規則を設定できます。(mew-refile-guess-alist は、必ず新しい書式で書いて下さい。詳しくは see config2 を参照のこと。)

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

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

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

規則は、以下のように書きます。

     rule ::= '<rule>
     <rule> ::= ((<key> <alist>) (<key> <alist>) ... [<special>])

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

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

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

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

     <special> ::= (t <folder>) | (nil <folder>)

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

     (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 です。

対話関係から推測
========

Mew には、整頓しようとしているメッセージの親のメッセージが以前整頓されたフォルダを選択してくれる機能があります。

たとえば、pooh、piglet、roo との間で、蜂蜜を取りに行こうという話題が盛り上がったとしましょう。pooh は、+project/honey というフォルダを作って、最初のメッセージをそこに整頓したとしましょう。以降、3 人の間のメッセージがきちんとした返答であるかぎり、+project/honey を推測してくれます。

あるメッセージをどこに保存したかという情報は、 "~/Mail/.mew-refile-msgid-alist" に保存されています。この情報を過去何通のメッセージに関して保存するかは、mew-lisp-max-length で決定します。初期値は 2000 通です。3000 通にしたい場合は "~/.mew.el" 中で以下のように設定して下さい。

     (setq mew-lisp-max-length 3000)

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

個人用のフォルダから推測
============

See by-folder で説明したメーリングリスト用のフォルダを推測するに加えて、個人用のフォルダを推測する機能があります。個人用のフォルダは +from 以下にありますから、+from 以下のフォルダを選択する機能だともいえます。以下の例を考えてみましょう。

     To: pooh@example.net
     From: piglet@example.org

piglet から pooh にメッセージが来ました。pooh がこの機能を使うと、From: を手がかりに +from/piglet が選択されます。(+from 以下は階層化されていても構いません。また、フォルダ名はユーザ名だけではなくアドレス全体でも OK です。)

この機能を提供する関数は、mew-refile-guess-by-from-folder といいます。

次に、pooh が piglet に返答した場合を考えましょう。pooh は自分自身に Cc: していたので、自分にメッセージが戻ってきました。

     To: piglet@example.org
     Cc: pooh@example.net
     From: pooh@example.net

pooh の立場になって考えてみて下さい。このメッセージを +from/pooh に整頓するか、あるいは +from/piglet に整頓するのかは、好みが分かれるところでしょう。そこで、どちらを選択するのかカスタマイズできるようになっています。

mew-refile-guess-from-me-is-special が t なら、 mew-refile-guess-by-from-folder は、From: が自分のアドレスの場合に、To: と Cc: にあるアドレスをもとに、+from 以下のフォルダを選択します。

From: から推測
==========

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

たとえば、piglet は piglet@example.org と p-p-p@example.org の 2 つのアドレスを持っているとしましょう。どちらのアドレスからメッセージが届いても、 pooh はそれらを +from/piglet に整頓したいと思っています。もちろん、以下のように明示的に規則を書けば実現できます。

     (setq mew-refile-guess-alist
       '(("From:"
           ("piglet@example.org" "+from/piglet")
           ("p-p-p@example.org"  "+from/piglet"))))

しかし、いちいち規則を書くのは面倒です。そこで、まず From: が piglet@example.org であるメッセージを +from/piglet に整頓します。これでフォルダ +from/piglet が作成されます。次に、From: が p-p-p@example.org であるメッセージを +from/piglet に整頓したとします。ここで Mew は、 p-p-p@example.org が +from/piglet に整頓されたことを学習します。以後 From: が p-p-p@example.org であるメッセージを整頓しようとすると、+from/piglet を選択するようになります。

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

From: とフォルダの情報は、"~/Mail/.mew-refile-from-alist" に保存されています。この情報を過去何通のメッセージに関して保存するかは、 see by-thread と同様に mew-lisp-max-length で決定します。

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

mew-refile-guess-from-me-is-special が t の場合、 mew-refile-guess-by-from は mew-refile-guess-by-from-folder(see by-from-folder)と同様な動きをします。

Newsgroups: から推測
================

ニュースをメールとして受信して Mew で読んでいる人のために、Newsgroups: からフォルダを推測する機能を用意しました。関数名は mew-refile-guess-by-newsgroups です。

デフォルトの規則
========

デフォルトの規則は、From: からユーザ名を切り出して、+from/user を選ぶようになっています。ただし、 mew-refile-guess-strip-domainpart が nil ならアドレスを切り出すので、+from/user@domain が選択されます。 mew-refile-guess-strip-domainpart の初期値は t です。

関数名は、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-ctrl-throw
         mew-refile-guess-by-newsgroups
         mew-refile-guess-by-folder
         mew-refile-ctrl-throw
         mew-refile-ctrl-auto-boundary
         mew-refile-guess-by-thread
         mew-refile-ctrl-throw
         mew-refile-guess-by-from-folder
         mew-refile-ctrl-throw
         mew-refile-guess-by-from
         mew-refile-ctrl-throw
         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 を入れて下さい。

C-uo は、この推測の流れを Message バッファに表示します。

自動で整理整頓
=======

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

この関数を実行すると、現在のフォルダ内の特定のメッセージに対して、自動的に o マークを付けてくれます。特定のメッセージとは、 mew-refile-auto-refile-skip-any-mark が nil なら、o や D マークが付いていないメッセージです。 mew-refile-auto-refile-skip-any-mark が t なら、なにもマークが付いてない(既読)メッセージです。 mew-refile-auto-refile-skip-any-mark の初期値は nil です。

C-uM-o は、mew-refile-auto-refile-skip-any-mark の値とは関係なく * マークの付いたメッセージを対象にします。

整頓先の決定には、先に説明した推測関数群が働くようになっています。この関数は、o を付けるだけですので、x を押さない限り実際にメッセージがどこかに行ってしまうことはありません。

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

     (defvar mew-refile-guess-control
       '(mew-refile-guess-by-alist
         mew-refile-ctrl-throw
         mew-refile-guess-by-newsgroups
         mew-refile-guess-by-folder
         mew-refile-ctrl-throw
         mew-refile-ctrl-auto-boundary
         mew-refile-guess-by-thread
         mew-refile-ctrl-throw
         mew-refile-guess-by-from-folder
         mew-refile-ctrl-throw
         mew-refile-guess-by-from
         mew-refile-ctrl-throw
         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 の御札を貼って下さい。

世界を越えたメッセージのコピー
===============

これまで説明した整頓とは、同じ世界の中でメッセージを移動させることでした。これに対し、ある世界から他の世界へメッセージを移動させたいこともあるでしょう。これは、ある世界から他の世界へメッセージへコピーし、その後元のメッセージを削除することで実現できます。ここでは、ある世界から他の世界へメッセージへコピーする方法について説明します。

あるフォルダのメッセージをローカルフォルダへコピーしたくなることがあります。この場合 lc を利用して下さい。lc は、リモート・フォルダで実行された場合、キャッシュされたメッセージから、そのリモート・フォルダに特有の情報をヘッダから取り除き、ローカル・フォルダへコピーします。 (lc は、ローカルフォルダでも実行できます。この場合、同じ世界内でのコピーになります。)

あるフォルダのメッセージを IMAP のフォルダ(サーバ側)へコピーするには、 li を利用します。

* の付いた複数のメッセージをローカル・フォルダへコピーするには mlc を使います。また、* の付いた複数のメッセージを IMAP フォルダへコピーするには mli を利用して下さい。

ある世界から他の世界へメッセージへコピーするコマンドを以下にまとめます。

lc
     あるフォルダのメッセージをローカルフォルダへコピーする。

mlc
     * の付いた複数のメッセージをローカル・フォルダへコピーする。

li
     あるフォルダのメッセージを IMAP のフォルダへコピーする。

mli
     * の付いた複数のメッセージを IMAP フォルダへコピーする。

仮想フォルダ
******

Virtual モードは、必要なメッセージを表示するための仮想的なフォルダであり、「セレクション」と「スレッド」の2種類に分類できます。

セレクション
     いろいろなフォルダから必要なメッセージだけを集めた仮想フォルダです。フォルダ名の左側に "*" が付きます。

スレッド
     フォルダ(Summary)やセレクション(Virtual)を基に、対話関係を行頭揃えによって可視化した仮想フォルダです。フォルダ名の両側に "*" が付きます。

Summary モードで利用できるコマンドの多くが、Virtual モードで利用できます。

Virtual モードでメッセージにマークを付けると、対応する Summary モードがあれば、そちらのメッセージにもマークが付きます。逆に、Summary モードであるメッセージにマークを付けても、Virtual モードの対応するメッセージにはマークは付きません。

Virtual モードからマークを処理することはできません。x を押しマークを処理しようとすると、対応する Summary モードがあれば、そちらに移動し、もう一度 x を押すよう促されます。

仮想フォルダはまさしく仮想であり、ファイルシステムなどには存在しないことに注意して下さい。Emacs を終了すると、仮想フォルダはなくなります。 Virtual モードを消去する方法については、see Quit を参照して下さい。

セレクション
======

セレクションは、いろいろなフォルダから必要なメッセージだけを集めた仮想フォルダです。セレクションの作り方には、以下の 5 つがあります。

m/
     あるフォルダで、"*" マークが付いているメッセージのみを表示する。

S
     あるフォルダで、メッセージをソートして表示する。(元のフォルダには、何の影響もない。) see sorting を参照のこと。

V
     現在のメッセージと対話関係にあるメッセージを表示する。See dialog を参照のこと。

/
     あるフォルダから、検索条件に合致するメッセージを表示する。See search を参照のこと。

k/
     すべてのフォルダから、検索条件に合致するメッセージを表示する。See dbsearch を参照のこと。

ソート
===

メッセージをソートしセレクションを作成するには S を使います。このとき次のようにどのフィールドでソートするか訊いてくるので、ソートしたいフィールド名を入力して下さい。

     Sort by? (default date):

指定したフィールドに書かれている文字列は単純に文字列比較でソートするべきではありません。たとえば、Subject: はテキストと考えてよいのですが、 Date: は日付、X-Mail-Count: は数字と考えてソートすべきです。このように文字列をどう取り扱うかをモードといいます。ソートによく指定されるフィールド名に対するモードは mew-sort-key-alist で設定されています。

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

     x-mail-count:num

フィールド名やモードは TAB で補完できます。

モードには、以下の 4 つがあります。

text
     先頭の "Re: " や "Fw: " を取り除いた文字列。

ml
     text と同じであるが、さらにメーリングリスト特有の文字列も取り除く。

num
     数値。

date
     日付。

"Sort by?" と訊かれる際のフィールド名の初期値は、 mew-sort-default-key で設定できます。以下は、初期値である"date" を "x-ml-count" に変更する例です。

     (setq mew-sort-default-key "x-ml-count")

mew-sort-default-key-alist で、フォルダごとにフィールド名の初期値を設定することもできます。ここで指定しなかったフォルダでは、フィールド名の初期値として mew-sort-default-key の値が使われます。以下は、 +inbox フォルダでの初期値を "subject" に、+mew-dist フォルダでの初期値を "x-mail-count" に変更する例です。

     (setq mew-sort-default-key-alist
           '(("+inbox" "subject")
             ("+mew-dist" "x-mail-count")))

なお、ローカル・フォルダでメッセージを本当にソートするためには M-s を使って下さい。このコマンドは、リモート・フォルダでは利用できません。

対話
==

Mew では、あるメッセージに関係するメッセージをさまざまなフォルダから集めて仮想フォルダに一覧表示できます。これを「対話」と呼びましょう。後ほど説明するスレッド(see thread)とは、以下の点で異なります。

  - スレッドは、1つのフォルダ/仮想フォルダに対してのみ作成できる。対話は、関連するメッセージが複数のフォルダに散らばっていてもよい。

  - スレッドは、行頭揃えによって木構造を可視化する。対話は、日付順に一覧表示する。

対話の機能を使うには、まず kI を実行し、データベースを作る必要があります。新しく届くメッセージはデータベースに入らないので、kI は定期的に実行して下さい。kI は、データベースを差分更新します。この方式は早いのですが、ゴミが残ることは避けられないので、ときどき C-ukI を実行し、データベースを一から作り直して下さい。

対話を作成するには、注目しているメッセージの上で V を押します。このコマンドは、自分の子孫と、自分の先祖、そして自分だけを表示します。自分の兄弟などは表示しません。一族全体を表示したいなら、一旦作った仮想フォルダの一番上にあるメッセージ、すなわち一族の祖の上で、もう一度 V を実行して下さい。

検索
==

Mew では、以下のようなメッセージの検索機能を提供しています。

?
     現在のフォルダで、条件に合致したメッセージに * マークを付ける。入力された条件によって、mewl か grep のどちらかが呼ばれる。

C-u?
     リージョンを指定した ?。

/
     現在のフォルダで、条件に合致したメッセージからセレクションを作る。入力された条件によって、mewl か grep のどちらかが呼ばれる。

C-u/
     リージョンを指定した /。

また、Spotlight や Windows Desktop Search などの検索エンジンを利用した検索も可能です。これには、以下のコマンドがあります。

k?
     現在のフォルダで、条件に合致したメッセージに * マークを付ける。

k/
     全フォルダに対し、条件に合致したメッセージからセレクションを作る。

C-uk/
     指定されたフォルダに対し、条件に合致したメッセージからセレクションを作る。フォルダを複数指定するには "," で区切る。ワイルドカードとして、"*" を利用できる。

検索条件の入力方法
=========

? や / を実行すると、Mew はユーザに対し以下のように検索のパターンを訊きます。

     mewl/grep pick pattern:

単純に「文字列」を 1 つ入力すると、Mew は grep を呼び出します。また、「条件式」を入力すると、mewl を呼び出します。

条件式の書式を以下に示します。(結合力の強い順に並んでいます。)

field=string
     フィールド field に文字列 string が含まれているときマッチ(大文字小文字を区別しない)。field に "head" を指定した場合は、ヘッダ全体を意味する。

field==string
     フィールド field に文字列 string が含まれているときマッチ(大文字小文字を区別する)。field に "head" を指定した場合は、ヘッダ全体を意味する。

field!=string
     フィールド field に文字列 string が含まれていないときマッチ(大文字小文字を区別しない)。field に "head" を指定した場合は、ヘッダ全体を意味する。

field!==string
     フィールド field に文字列 string が含まれていないときマッチ(大文字小文字を区別する)。field に "head" を指定した場合は、ヘッダ全体を意味する。

( <pattern> )
     <pattern> の内容を先に評価。

! <pattern>
     <pattern> でないときマッチ。

<pattern1> & <pattern2>
     <pattern1> かつ <pattern2> のときマッチ。省略可能。

<pattern1> | <pattern2>
     <pattern1> または <pattern2> のときマッチ。

以下に例を示します。

(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

? や / で、パターンに入力の際に単純に RET を押すと、以下のように利用するコマンドまで入力できるようになります。

     Cmd opts pattern: grep -l -e

k? や k/ で検索エンジンを利用する場合は、上記のパターン(文字列や条件式)が自動的に検索エンジンの書式に変換されます。

たとえば、kazu から来たメールで、「wine」を含み、かつ「bordeaux」を含まないという条件式は以下のように書きます。

     from=kazu wine ! bordeaux

なお、mew-pick-pattern-list にパターンのリストを定義しておくと、 C-cTAB で各要素を循環的に補完できます。この場合、リストの先頭がデフォルトとして表示されます。

日本語の全文検索をしたい場合は、("grep" の代わりに) "mg" をインストールし、以下のように設定して下さい。

     (setq mew-prog-grep "mg")
     (setq mew-prog-grep-opts '("-j" "jis" "-l" "-e" "-x" "&mime"))

検索エンジン
======

検索エンジンを操作するために以下のコマンドが用意されています。

km
     そのフォルダのインデックスを作る。

kM
     全体のフォルダのインデックスを作る。あるいは、作るために初期化する。

kc
     検索エンジンを切り替える。

以下に、それぞれの検索エンジンの説明を示します。

Hyper Estraier
     定期的に kM を実行する必要があります。コマンドラインで、 "mewest" を実行しても構いません。あるフォルダのインデックスを急いで更新したいなら km でもよいでしょう。k? とk/ の両方が利用できます。C-uk/でフォルダを指定すると、サブディレクトリも検索になります。

Spotlight
     一度だけ kM を実行する必要があります。km は必要ありません。 k? と k/ の両方が利用できます。

Windows Desktop Search
     一度だけ kM を実行する必要があります。km は必要ありません。

Google Desktop
     一度だけ kM を実行する必要があります。km は必要ありません。 k/ のみが利用できます。

検索エンジンの初期値は、最初に見つかった利用できるものに自動的に設定されます。明示的に指定したい場合は、mew-search-method に'est、'spotlight、'wds, 'google のどれかを指定して下さい。以下は、 Hyper Estraier に設定する例です。

     (setq mew-search-method 'est)

キーワードの強調
========

検索に使ったキーワードは、バッファに保存されています。メッセージを表示し、さらにキーワードをハイライトすることができます。この機能を提供するコマンドは以下の通りです。

M-n
     下方向のメッセージへ移動しキーワードをハイライトして表示。Summary モードでは * マークのついたメッセージが、Virtual モードではすべてのメッセージが対象となる。このコマンドを繰り返し利用すると、キーワードの付近が次々と表示されていく。キーワードが設定されていないなら、ユーザにキーワードを訊く。

C-uM-n
     キーワードを明示的に設定できること以外は、M-n に同じ。

M-p
     M-n を逆方向にしたコマンド。

C-uM-p
     C-uM-n を逆方向にしたコマンド。

スレッド
====

メッセージをやりとりしていると、対話の流れは木構造になります。これを行頭揃えにより可視化したものをスレッドと呼びます。以下にスレッドの例を示します。

       03/12 Hidenori Ohta  今週末                    |日曜にストーンマジック
       03/13 かずくん       ┣Re: 今週末              |雨なので、中にしますか
       03/15 Hidenori Ohta  ┃┗Re: 今週末            |それでは、12:00 に集合
       03/14 おだちゃん     ┗Re: 今週末              |いいねぇ。次はあれを落

スレッドは仮想フォルダとして実現されています。たとえば、+inbox に対しスレッドを作ると、*+inbox* というバッファが用意されます。

スレッドを作るために、以下のコマンドが用意されています。

tt
     Summary モード、あるは、セレクションからスレッドを作る。そして、カーソルを現在のメッセージに移動する。もし、対応するスレッドがすでに存在しているなら、スレッドに表示を切り替える。スレッドで使用された際は、元のフォルダへ移り、カーソルを現在のメッセージへ移動する。

C-utt
     リージョンに対し、スレッドを作る。

mt
     * マークの付いているメッセージに対し、スレッドを作る。

tr
     正規表現に合致したメッセージに対し、スレッドを作る。

スレッドの操作
=======

スレッドに特化した移動コマンドを以下に示します。

tp
     現在のスレッドの頭に移動する。もし、あるスレッドの頭にカーソルがある場合は、前のスレッドの頭に移動する。

tn
     次のスレッドの頭に移動する。

^
     親のメッセージに移動する。(スレッドでなくても利用可能)

&
     長男のメッセージに移動する。(スレッドでなくても利用可能)

(
     兄のメッセージに移動する。

)
     弟のメッセージに移動する。

スレッドにマークを付けるコマンドを以下に示します。

t*
     現在のメッセージを頭とする部分木に属するメッセージすべてに * マークを付ける。詳しくは see target mark を参照のこと。

t$
     現在のメッセージを頭とする部分木に属するメッセージすべてに $ マークを付ける。詳しくは see escape mark を参照のこと。

td
     現在のメッセージを頭とする部分木に属するメッセージすべてに D マークを付ける。詳しくは see delete mark を参照のこと。

tM-d
     現在のメッセージを頭とする部分木に属するメッセージすべてに X マークを付ける。詳しくは see delete mark を参照のこと。

to
     現在のメッセージを頭とする部分木に属するメッセージすべてに o マークを付ける。詳しくは see refile mark を参照のこと。

スレッドからマークを消すコマンドは、tu です。

以下に、スレッドを加工するコマンドを示します。

tSPC
     子供以下を隠して親だけにする。子供以下が隠れている親メッセージには、 "+" が付く。また、子供以下が隠れている親メッセージでこのコマンドを実行すると、子供以下が現れる。

ta
     すべてのスレッドに対し、子供の表示を反転させる。

tg
     あるスレッドをあるメッセージに接ぎ木する。接ぎ木するスレッドは、 C-SPC で指定する。目的のスレッドの一番上のメッセージで、 C-SPC を押すと、そのスレッドが選択されたことになる。そして目的のメッセージへ移動し、tg を押すと、スレッドがこのメッセージの子供として接ぎ木される。

なお、mew-use-thread-separator を t にすると、スレッド間に境界文字列として mew-thread-separator (初期値は "--") が挿入されます。

一休み
***

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

<Summary モードと Virtual モード>

q
     Mew を一時中断し、他のバッファに切り替える。Mew 用のバッファはすべて残っているので、バッファ操作で選べば再開できる。

Q
     Mew を終了。Mew が使ったすべてのバッファを消去する。

C-cC-q
     そのモード(正確にはバッファ)を消去する。

<Draft モードと Header モード>

C-cC-q
     その草稿を消去する。

<Addrbook モード>

C-cC-q
     そのバッファを消去する。

カスタマイズ
******

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

Summary mode
============

Summary モードの書式は、mew-summary-form で指定できます。以下に初期値を示します。

     (setq mew-summary-form '(type (5 date) " " (14 from) " " t (30 subj) "|" (0 body)))

このように、mew-summary-form は、リスト、シンボル、文字列のリストです。

 1. 文字列はそのまま出力される

 2. リストは、整数とシンボルから構成される。シンボルは、呼び出す関数を意味する。関数名は、"mew-summary-form-" とシンボル名を連結することで作られる。 (例： 'date というシンボルは、mew-summary-form-date という関数名になる) あらかじめ定義されているシンボルには、'type、'time、'date、'year、 'size、'from、'subj、'body がある。詳細は、 mew-summary-form-<symbol> という名を持つ関数の説明を参照のこと。整数は、関数が返す文字列が埋めるフィールドの幅を指定する。正の数は、左詰めを意味する。負の数は、右詰めを意味する。もし、負の数を指定する場合、対応する関数は ASCII 文字列を返す必要がある。0 は、行の残りを意味し、左詰めとなる。

 3. t 以外のシンボルは、(1 シンボル) に等しい。

 4. mew-summary-form は、利用される際に先頭に (mark) が付け加えられる。

 5. t は、スレッドの際に段付けする位置を意味する。

例を以下に示します。

     (setq mew-summary-form
           '(type (5 date) " " (-4 size) " " (14 from) " " t (30 subj) "|" (0 body)))

mew-summary-form-from-me-prefix は、自分から送信されたメッセージの宛先の先頭に加えられる文字列です。初期値は "To:" です。

mew-summary-form-extract-rule は、From: フィールドからどの部分を切り出すか指定するためのリストです。要素は、'name、'comment、'address、 'nickname、あるいは正規表現である必要があります。初期値は '(nickname) です。

次の例を考えて下さい。

     A: Kazu Yamamoto <kazu@example.org>
     B: kazu@example.org (Kazu Yamamoto)
     C: Kazuhiko Yamamoto (Kazu) <kazu@example.org>

それぞの要素は、以下のような意味を持ちます。

 1. 'name:: 名前の部分

          A. Kazu Yamamoto
          B. (No match)
          C. Kazuhiko Yamamoto (Kazu)

 2. 'comment:: コメントの部分

          A: (No match)
          B: Kazu Yamamoto
          C: (Kazu)

 3. 'address:: アドレスの部分

          A: kazu@example.org
          B: kazu@example.org
          C: kazu@example.org

 4. 'nickname:: mew-addrbook-for-summary の値に応じたアドレス帳の個人情報のある要素。mew-addrbook-for-summary の初期値は 'nickname なので、通常はニックネームに変換される。何が指定できるかは、see draft-mode を参照のこと。

 5. (regex):: 最初に合致した文字列

ある要素が合致しない場合、次の要素が評価されます。どの要素も From: フィールドに合致しない場合か、この値が nil の場合、From: フィールド全体が利用されます。

mew-summary-form-mark-delete が t の場合、重複しているメッセージに自動的に D マークが付きます。初期値は nil です。

mew-summary-form-mark-spam が t の場合、本文の一部に対する MD5 チェックサムが一致しているメッセージに自動的に D マークが付きます。初期値は nil です。

mew-summary-form-mark-review が t の場合、自分宛てのメッセージに自動的に * マークが付きます。初期値は nil です。

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

     (setq mew-use-full-window t)

Summary モードの SPC は、mew-summary-show-direction によって、次のメッセージの表示の仕方が変わります。また同様に、強いマークを付けた後カーソルが動く方向は mew-summary-mark-direction により指定できます。以下の値を設定できます。

up
     上のメッセージを表示する。

down
     下のメッセージを表示する。

next
     読み進めている方向の次のメッセージを表示する。

stop
     次は表示しない。

両方とも初期値は next です。いつもメッセージを下から読む人は、以下のようにすればよいでしょう。

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

Message mode
============

Emacs がサポートしてないデータ型のファイルは、Message バッファに直接表示できません。そのデータをテキストに整形する外部コマンドをインストールすれば、Message バッファに表示可能になります。

"w3m" と "emacs-w3m" をインストールすると、Text/Html を Message バッファに表示できるようになります。(以下で説明する "wvHtml"、"xlhtml"、 "ppthtml" は、単なる "w3m" ではなく、国際化された "w3m-m17n" が必要です。) 両者をインストールしたら、"~/.mew.el" に以下の設定を加えて下さい。

     (setq mew-use-text/html t)		; decode HTML for all folders

これで、あたかも Text/Plain であるかのように、Text/Html を Message バッファに表示できるようになります。この際も、以下で説明する C-cC-e の操作は有効です。

     (condition-case nil
         (require 'mew-w3m)
       (file-error nil))

"wvHtml"、"xlhtml"、"ppthtml" というコマンドをインストールすれば、それぞれ WORD、Excel、PowerPoint ファイルのテキスト部分を、Message バッファに表示可能です。これらのコマンドは、HTML を利用するので、上記の Text/Html の設定を完了させて下さい。これで、たとえば WORD ファイルをあたかもテキストのように、Message バッファに表示可能になります。

外部のプログラムの整形結果を Message バッファに表示する代わりに、外部のプログラム自身にそのデータを表示させることもできます。これには C-cC-e を使います。

Message バッファに画像を表示することもできます。また C-cC-e を使い、外部のプログラムに表示させることも可能です。

HTML は C-cC-e を使って外部のブラウザに表示できます。Windows や Mac ではデフォルトのブラウザが利用されます。Unix では、以下のように "mozilla" が初期値となっています。

     (defvar mew-prog-text/html-ext '("mozilla" ("-remote" "openFile(%s)") t))

たとえば、これを "firefox" に変更するには以下のようにします。

     (setq mew-prog-text/html-ext
           '("firefox" ("-a" "firefox" "-remote" "openFile(%s)") t))

Office 関連のファイルも、C-cC-e を使えば、それぞれのアプリケーションで表示可能です。Windows や Mac では、文字通り Office のアプリケーションが起動されます。Unix では、以下のように "soffice" が初期値となっています。

     (defvar mew-prog-msword-ext "soffice")
     (defvar mew-prog-msexcel-ext "soffice")
     (defvar mew-prog-mspowerpoint-ext "soffice")

これを "xdg-open" に変更するには以下のようにします。

     (setq mew-prog-msword-ext "xdg-open")
     (setq mew-prog-msexcel-ext "xdg-open")
     (setq mew-prog-mspowerpoint-ext "xdg-open")

また Office 関連のアプリケーションに対し、SPC などでは内容を表示せず、C-cC-e では "wvHtml" などを使って Message バッファに表示するには、以下のように設定します。

     (setq mew-prog-msword  '(nil mew-mime-application/msword))
     (setq mew-prog-msexcel '(nil mew-mime-application/msexcel))
     (setq mew-prog-mspowerpoint '(nil mew-mime-application/mspowerpoint))

あらかじめ定められているコマンドではなく、任意の外部コマンドを呼び出したい場合は、C-uC-cC-e と入力して下さい。

最近、Multipart/Alternative の中に Text/Plain と Text/Html の両方が入っており、どちらかを選ぶようになっているメッセージを多く見掛けます。Mew は、標準では Text/Plain の方を優先して表示します。"emacs-w3m" をインストールすれば、Text/Html の方を優先したくなるかもしれません。その場合、以下の設定を "~/.mew.el" に加えて下さい。(ここで see multipart を読み、: の使い方も思い出しておきましょう。)

     (setq mew-mime-multipart-alternative-list
           '("Text/Html" "Text/Plain" ".*"))

ZIP で暗号化された添付ファイルは、zz で復号化し表示できます。

Draft mode
==========

自分へ Cc: したい人は mew-cc を設定して下さい。返答の際には、対象のメッセージから、別途 Cc: が用意される場合があります。複数の Cc: がある場合、送信時に 1 つにまとめられます。

バックアップのため、自分が送るメッセージを受け取りたいと考え、しかもヘッダに自分のアドレスを残したくないなら、Dcc: を使って下さい。 mew-dcc に自分のアドレスを設定しましょう。

いつも入れて欲しいヘッダは、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.example.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 (function mew-cite-prefix-username))

これで引用記号は以下のようになります。

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

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

引用ラベルの From: の部分と、引用記号は、アドレス帳の個人情報の要素に変換できます。それぞれ、mew-addrbook-for-cite-label、 mew-addrbook-for-cite-prefix で指定できます。初期値はそれぞれ nil と 'username です。以下のような値が設定できます。

'shortname
     短縮名

'address
     アドレス

'username
     アドレスのユーザ部分

'nickname
     ニックネーム

'name
     正式な氏名

例として以下のような設定を考えてみましょう。

     (setq mew-addrbook-for-cite-label 'nickname)
     (setq mew-addrbook-for-cite-prefix 'nickname)

最初の設定でラベルの中のアドレスがニックネームに変わります。また、次の設定で引用記号もニックネームに置き換わります。

     From: すみっち
     Subject: Wine
     Date: Wed, 23 Jul 1997 11:40:50 +0900

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

文字コード
=====

See charset-guess で説明したように、Mew ではメッセージを作成する際に適切な文字コードを自動的に選択します。

もし複数の言語の文字が混在しており、国際化された文字コードを選択する必要がある場合は、mew-charset-m17n の値を利用します。初期値は、 "utf-8" (Unicode と理解してよい)です。"iso-2022-jp-2" にしたい人は、以下のように設定するとよいでしょう。

     (setq mew-charset-m17n "iso-2022-jp-2")

メッセージを作成した際に、推測された文字コードを確認したい場合は、 mew-ask-charset を設定して下さい。

nil
     どのような文字コードが利用されても確認なし

文字コードのリスト
     このリストに存在しない文字コードが利用された場合に確認

t
     mew-charset-m17n が利用された場合に確認

たとえば、US-ASCII と ISO-2022-JP 以外の文字コードが選ばれた場合確認したいのであれば、以下のように設定して下さい。

     (setq mew-ask-charset '("us-ascii" "iso-2022-jp"))

こう設定しているとき、たとえば "utf-8" が選択されると、以下のように訊かれます。

     utf-8 is used. OK? (y or n)

y を押すと、メッセージが送信されます(あるいは、キューに溜ります)。 n を押すと、草稿が元の状態に戻ります。

ヨーロッパでは、Latin 1 (ISO-8859-1) の代りに、ユーロ記号を含む Latin 9 (ISO-8859-15、通称 Latin 0) が使われ始めています。草稿に、Latin 1 の文字と Latin 9 の文字が混在していると、以下の手順によって、文字コードが決定されます。

 1. unify-8859-on-decoding-mode を利用している場合：

      1. ISO-8859-1 に収まるなら "iso-8859-1" を利用

      2. そうでないなら "utf-8" を利用

 2. unify-8859-on-decoding-mode を利用していない場合：

      1. ISO-8859-1 と ISO-8859-15 のどちらにも収まる場合、"ISO-8859-1"

      2. ISO-8859-1 に収まるなら "iso-8859-1" を利用

      3. ISO-8859-15 に収まるなら "iso-8859-15" を利用

      4. そうでないなら、"utf-8" を利用

mew-charset-latin の初期値は、"iso-8859-15" です。"iso-8859-1" にしたい場合は、以下のように設定します。

     (setq mew-charset-latin "iso-8859-1")

もし、US-ASCII 以外の文字に対し、必ず UTF-8 を使いたいなら、以下のように設定して下さい。

     (setq mew-cs-database-for-encoding
           `(((ascii) nil "7bit" "7bit")
             (nil utf-8 "base64" "B")))

色付け
===

mew-use-highlight-mark が t の場合、マークの付いたメッセージに色が付きます。初期値は t です。

mew-use-highlight-header が t の場合、メッセージのヘッダに色が付きます。初期値は t です。

mew-use-highlight-body が t の場合、メッセージの本文に色が付きます。初期値は t です。色を付ける上限は、 mew-highlight-body-max-size で指定できます。初期値は 10000 バイトです。

mew-use-highlight-url が t の場合、メッセージ中の URL に仕掛けが施されて、マウスを持っていくと光るようになります。初期値は t です。

mew-use-cursor-mark が t の場合、Summary モードにおいて、現在表示しているメッセージの行頭に、mew-cursor-mark で指定された目印が付きます。初期値は nil です。mew-cursor-mark の初期値は ">" です。

mew-use-highlight-cursor-line が t の場合、Summary モードでカーソルのある行に下線が引かれます。初期値は t です。

mew-use-highlight-mouse-line が t の場合、Emacs がマウスの色付けをサポートしていれば、Summary モードでマウスのある行に色がつきます。真中のボタンをクリックしながら、マウスだけでメッセージを読む際にはとても便利です。初期値は nil になっています。

mew-use-highlight-x-face が t で、ヘッダ中の X-Face: が Message モードでアイコン化されます。初期値は t です。この機能を利用するには、"netpbm" と "compface" パッケージをインストールして下さい。

色を変更するには、Mew のソースと一緒に配布されている "dot.theme" を適当な名前でコピーし内容を変更します。ここでは、そのファイル名を "~/.mew-theme.el" としましょう。まず、この名前を ".mew.el" で mew-theme-file に指定して下さい。

     (setq mew-theme-file "~/.mew-theme.el")

次に中身を変更します。たとえば、以下のような設定が見つかります。

     (mew-setface-bold header-subject
       :tty "red" :light "Firebrick" :dark "OrangeRed")

シンボル header-subject は、ヘッダの "Subject:" の値を意味しています。:tty は Emacs をカラーの端末で起動した場合、:light と :dark は、それぞれ Emacs をウインドウで起動したときの背景が白と黒の場合を意味しています。

端末では green 、背景が白なら ForestGreen、背景が黒なら LimeGreen と設定するには、以下のようにします。

     (mew-setface-bold header-subject
       :tty "green" :light "ForestGreen" :dark "LimeGreen")

シンボルに何があるのかは、"dot.mew" を見て下さい。

上記の方法では、ヘッダのすべてのフィールド名やフィールド値に対してシンボルが定義されている訳ではありません。そこで、どんなフィールドの色でも簡単に変更できるように、mew-header-color と mew-header-color-bold という関数が用意されています。後者を使うと太字に、前者を使うと普通の文字になります。たとえば、以下のように使います。

     (mew-header-color-bold "Subject:" "LimeGreen" "OrangeRed")

この設定では、"Subject:" が LimeGreen の太字に、その値が OrangeRed の太字になります。

この方法では、端末や背景の色を考慮した設定はできません。また、フィールド値の色を省略すると、フィールド名と同じ色が使用されます。

フック
===

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

mew-env-hook
     Mew の起動時の環境が設定される前に評価される。

mew-init-hook
     Mew の起動時に評価される。

mew-status-update-hook
     状態の更新(Z)のときに評価される。

mew-summary-mode-hook
     Summary モードに入るときに評価される。

mew-virtual-mode-hook
     Virtual モードに入るときに評価される。

mew-thread-display-hook
     スレッドが表示された後に評価される。

mew-header-mode-hook
     Header モードに入るときに評価される。

mew-draft-mode-hook
     Draft モードに入るときに評価される。

mew-draft-mode-newdraft-hook
     新しい草稿が用意された際に、Draft モードにおいて評価される。

mew-draft-mode-reedit-hook
     +draft でないフォルダにある古い草稿を再編集した際に、Draft モードにおいて評価される。

mew-draft-mode-reedit-draft-hook
     +draft でないフォルダにある草稿を再編集した際に、Draft モードにおいて評価される。

mew-draft-mode-reedit-queue-hook
     +queue または +postq フォルダにあるメッセージを再編集した際に、Draft モードにおいて評価される。

mew-draft-mode-edit-again-hook
     古い形式で戻ってきたメッセージを再編集した際に、Draft モードにおいて評価される。

mew-message-mode-hook
     Message モードに入るときに評価される。

mew-message-hook
     メッセージが Message モードで表示される度に評価される。

mew-make-message-hook
     Draft モードで MIME メッセージを作る前、つまり C-cC-m の際の最初に評価される。例：(add-hook 'mew-make-message-hook 'ispell-message)

mew-send-hook
     メッセージを SMTP で送信/キューイングする前に評価される。メッセージの最終形が作られる前に評価されることに注意。

mew-post-hook
     メッセージを NNTP で投稿/キューイングする前に評価される。メッセージの最終形が作られる前に評価されることに注意。

mew-real-send-hook
     メッセージを SMTP で送信/キューイングする前に評価される。メッセージの最終形が作られた後に評価されることに注意。

mew-real-post-hook
     メッセージを NNTP で送信/キューイングする前に評価される。メッセージの最終形が作られた後に評価されることに注意。

mew-smtp-flush-hook
     +queue フォルダにメッセージがある場合に、SMTP が起動される前に評価される。

mew-nntp2-flush-hook
     +postq フォルダにメッセージがある場合に、NNTP が起動される前に評価される。

mew-smtp-sentinel-hook
     SMTP が終了する際に評価される。

mew-nntp-sentinel-hook
     受信用の NNTP が終了する際に評価される。

mew-nntp2-sentinel-hook
     送信用の NNTP が終了する際に評価される。

mew-pop-sentinel-hook
     POP が終了する際に評価される。

mew-pop-sentinel-non-biff-hook
     Biff ではない POP が終了する際に評価される。

mew-imap-sentinel-hook
     IMAP が終了する際に評価される。

mew-imap-sentinel-non-biff-hook
     Biff ではない IMAP が終了する際に評価される。

mew-scan-sentinel-hook
     Summary モードの s が終了する際に評価される。

mew-summary-ls-no-scan-hook
     Summary モードの s がフォルダの一覧を取らなかった場合に評価される。

mew-summary-exec-hook
     Summary モードの x の実行が終了する際に評価される。

mew-refile-guess-by-from-learn-hook
     mew-refile-guess-by-from-learn が実行される際に評価される。

mew-sort-hook
     Summary モードの M-s の実行が終了する際に評価される。

mew-pack-hook
     Summary モードの O の実行が終了する際に評価される。

mew-summary-delete-folder-hook
     フォルダが削除されるときに評価される。

mew-summary-rename-folder-hook
     フォルダ名が変更されるときに評価される。

mew-summary-toggle-disp-msg-hook
     Summary モードの v の実行が終了する際に評価される。

mew-syntax-format-hook
     マルチパートの書式を作成する関数 mew-syntax-format が呼ばれた際に評価される。

mew-addrbook-mode-hook
     アドレス帳の登録モードに入るときに評価される。

mew-cite-hook
     Draft モードで引用する際に呼ばれる。通常 supercite を設定するために使う。

mew-before-cite-hook
     Draft モードでメッセージを引用する直前に呼ばれる。

mew-suspend-hook
     Mew を一時中断した際に評価される。

mew-quit-hook
     Mew の終了時に評価される。

以下にフックの設定例を示します。

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

     (add-hook 'mew-draft-mode-hook
               (lambda ()
                 (auto-fill-mode 1)
                 (set-fill-column 70)))

この例では、折り返しのカラム数を70に設定しています。

POP
===

Mew では、メッセージを受信する際に POP を利用できます。ここでは、POP を制御するための以下の変数についてまとめます。

mew-pop-server
     POP サーバの名前。

mew-pop-ssh-server
     POP を SSH 経由で取得する場合の SSH サーバの名前。

mew-pop-ssl
     POP over SSL を使うか否か。

mew-pop-ssl-port
     POP over SSL のポート番号。

mew-pop-user
     POP のアカウント名。初期値はログイン名。

mew-pop-auth
     POP の認証方式。'pass は USER/PASS (生パスワード)、'apop は APOP、t は mew-pop-auth-list に従った SASL を意味する。初期値は 'apop。

mew-pop-auth-list
     SASL で利用する認証方式のリスト。優先順位の高い順に並べる。現在、 "CRAM-MD5" が利用可能。

mew-pop-delete
     POP サーバからメッセージを取得後、POP サーバにあるメッセージを削除するか否か。t なら削除。nil なら削除しない。数値 N なら、最初のアクセスから N 日後に削除する。初期値は t。

mew-pop-size
     POP サーバから取得するメッセージの大きさの上限。初期値は 55296 バイト。0 に設定すると、上限なしの意味になり、すべてのメッセージを取得する。上限に引っ掛かったメッセージの全体を取得する方法については、see retrieving を参照のこと。

mew-pop-body-lines
     大きさの上限にひっかかったメッセージの本文を何行取得するかという値。初期値は 40。

mew-pop-header-only
     POP でメッセージを取得する際に、ヘッダのみにするか、本文も取得するか。 nil でなければ、ヘッダのみを取得。初期値は nil。

IMAP
====

Mew では、メッセージを受信する際に IMAP を利用できます。ここでは、IMAP を制御するための以下の変数についてまとめます。

mew-imap-server
     IMAP サーバの名前。

mew-imap-ssh-server
     IMAP を SSH 経由で取得する場合の SSH サーバの名前。

mew-imap-ssl
     IMAP over SSL を使うか否か。

mew-imap-ssl-port
     IMAP over SSL のポート番号。

mew-imap-user
     IMAP のアカウント名。初期値はログイン名。

mew-imap-auth
     IMAP の認証方式。nil は LOGIN (生パスワード)、t は mew-imap-auth-list に基づいた SASL を意味する。初期値は t。

mew-imap-auth-list
     SASL で利用する認証方式のリスト。優先順位の高い順に並べる。現在、 "CRAM-MD5" と "LOGIN" が利用可能。

mew-imap-delete
     IMAP サーバからメッセージを取得後、IMAP サーバにあるメッセージを削除するか否か。t なら削除。nil なら削除しない。数値 N なら、最初のアクセスから N 日後に削除する。初期値は t。

mew-imap-size
     IMAP サーバから取得するメッセージの大きさの上限。初期値は 55296 バイト。 0 に設定すると、上限なしの意味になり、すべてのメッセージを取得する。上限に引っ掛かったメッセージの全体を取得する方法については、 see retrieving を参照のこと。

mew-imap-header-only
     IMAP でメッセージを取得する際に、ヘッダのみにするか、本文も取得するか。 nil でなければ、ヘッダのみを取得。初期値は nil。

NNTP
====

Mew では、ニュースを読み書きする際に NNTP を利用します。ここでは、NNTP を制御するための以下の変数についてまとめます。

mew-nntp-server
     NNTP サーバの名前。

mew-nntp-ssh-server
     NNTP を SSH 経由で取得する場合の SSH サーバの名前。

mew-nntp-ssl
     NNTP over SSL を使うか否か。

mew-nntp-ssl-port
     NNTP over SSL のポート番号。

mew-nntp-user
     NNTP のアカウント名。もし nil でなければ、認証の手続きが実行される。(mew-nntp-auth という変数はないことに注意。)

mew-nntp-newsgroup
     ニュースグループ名の初期値。

mew-nntp-size
     NNTP サーバから取得するメッセージの大きさの上限。初期値は 55296 バイト。 0 に設定すると、上限なしの意味になり、すべてのメッセージを取得する。上限に引っ掛かったメッセージの全体を取得する方法については、 see retrieving を参照のこと。

mew-nntp-header-only
     NNTP でメッセージを取得する際に、ヘッダのみにするか、本文も取得するか。 nil でなければ、ヘッダのみを取得。初期値は nil。

mew-nntp-msgid-user
     Message-Id: を作成するためのユーザ名。nil であれば mew-user の値が利用される。初期値は nil。 Message-Id: の書式は以下を参照。

mew-nntp-msgid-domain
     Message-Id: を作成するためのドメイン名。nil であれば mew-mail-domain の値が利用される。初期値は nil。 Message-Id: の書式は以下を参照。

なお、NNTP 用の Message-Id: の値は以下のように作成されます。

     message-id = *random*.nntp-msgid-user@nntp-msgid-domain

SMTP
====

Mew では、メッセージを送信する際に SMTP を利用します。SMTP サーバが認証を要求した場合、Mew は自動的にユーザにバスワードの入力を求めます。ここでは、SMTP を制御するための以下の変数についてまとめます。

mew-smtp-server
     SMTP サーバの名前。

mew-smtp-port
     SMTP ポート番号。絶対パス名を指定すると Unix ドメインソケットを使用する。

mew-smtp-submission-family
     SMTP サーバと接続する際に用いるアドレスファミリ。初期値は 'ipv4。

mew-smtp-ssh-server
     SSH 経由でメッセージを送る際の SSH サーバの名前。

mew-smtp-ssl
     SMTP over SSL を使うか否か。

mew-smtp-ssl-port
     SMTP over SSL のポート番号。

mew-smtp-user
     SMTP AUTH で利用されるアカウント名。設定されない場合は、自動的にメールアドレスに設定される。

mew-smtp-auth-list
     SMTP AUTH で利用する認証方式のリスト。優先順位の高い順に並べる。初期値は、'("CRAM-MD5" "PLAIN" "LOGIN")。

mew-smtp-helo-domain
     SMTP HELO コマンドで使われるサーバ名。初期値は "localhost"。

mew-smtp-mail-from
     SMTP MAIL FROM コマンドで指定されるアドレス。nil の場合は、From: フィールドのアドレスが指定される。初期値は nil。

mew-smtp-msgid-user
     Message-Id: を作成するためのユーザ名。nil であれば mew-user の値が利用される。初期値は nil。 Message-Id: の書式は以下を参照。

mew-smtp-msgid-domain
     Message-Id: を作成するためのドメイン名。nil であれば mew-mail-domain の値が利用される。初期値は nil。 Message-Id: の書式は以下を参照。

mew-use-8bit
     8 ビットテキストを符号化せずにそのまま送るか否か。nil の場合は、適切な MIME 符号化が施される。初期値は nil。

なお、SMTP 用の Message-Id: の値は以下のように作成されます。

     message-id = *random*.smtp-msgid-user@smtp-msgid-domain

Message Submission (ポート番号が 587 である送信用の SMTP)を使いたい場合は、以下のように設定して下さい。

     (setq mew-smtp-port "submission")

送信サーバとの接続に Unix ドメインソケットを使いたい場合は、以下のように mew-smtp-port に絶対パス名を設定して下さい。

     (setq mew-smtp-port "/var/run/msp.sock")

送信サーバとの接続に IPv6 を使いたい場合は、以下のように mew-smtp-submission-family に 'ipv6 を設定して下さい。

     (setq mew-smtp-submission-family 'ipv6)

SSL (see SSL)や TLS (see TLS) の章も参考にして下さい。

SMTP サーバの中には、認証なし、つまりパスワードを送られるとエラーと見なす設定であるにも関わらず、認証を要求してくるものがあります。Mew は、 SMTP サーバが認証を要求すると、ユーザにパスワードを尋ねて、入力されたパスワードをサーバへ送ります。上記のようなおかしな SMTP サーバに対処するには、以下のように設定し、認証を要求されてもパスワードを送らなくすればよいでしょう。

     (setq mew-use-smtp-auth nil)

mew-use-smtp-auth
     SMTP サーバが認証を要求したとき、パスワードを送るかどうか。デフォルトは t。nil にすると、SMTP サーバが認証を要求しても無視する。

送受信の動作変化
========

mew-config-alist を使うと、メッセージの送受信に関する動作に変化をつけられます。以下の設定例を使って説明します。

     (setq mew-config-alist
           '((home
              (inbox-folder   "+inbox-home")
              (pop-server     "pop.iij4u.or.jp"))
             (ext
              (pop-ssh-server "ssh.example.org"))
             (default
              (proto          "%")
              (imap-server    "imap.example.org")
              (pop-server     "pop.example.org"))))

この例では、"home"、"ext"、"default" という 3 つのケースを定めています。それぞれのケースに対して、いくつかのキーと値の対が設定されています。

この例を使って、mew-config-alist の意味を説明します。ケースを "home" にして "pop-server" を索くと、"pop.iij4u.or.jp" が得られます。ケースを "ext" にして "pop-server" を索くと、"ext" には該当するキーがないので、"default" を見て、"pop.example.org" が得られます。ケースを "default" にして "pop-server" を索くと、"pop.example.org" が得られます。

ケースを "home" にして "inbox-folder" を索くと、"+inbox-home" が得られます。ケースを "ext" にして "inbox-folder" を索くと、"ext" には該当するキーがなく、さらに "default" にもないので、mew-inbox-folder という変数の値が得られます。ケースを "default" にして "inbox-folder" を索いた場合も、mew-inbox-folder の値が得られます。

"proto" (mew-proto)は、M-x mew と入力された際に、どのフォルダに移動するか指定するために使います。(Mew を起動するために M-x mew と入力する場合、"default" ケースの "proto" が利用されます。Mew が起動している際に、M-x mew と入力するとケースに従って、 "proto" が選ばれます。)

値の候補は、"+"、"$"、"%"、"-" です。これらは標準では、"+inbox"、 "$inbox"、"%inbox"、"-fj.mail.reader.mew" を意味します。

mew-config-alist で設定できるキーは、mew-"キー" という変数に対応しています。以下に設定できる項目を列挙します。

     name, user, mail-domain,
     cc, fcc, dcc, reply-to, organization, header-alist, proto,
     smtp-server, smtp-port, smtp-ssh-server, smtp-ssl, smtp-ssl-port,
     smtp-user, smtp-auth-list,
     smtp-msgid-user, smtp-msgid-domain, smtp-helo-domain, smtp-mail-from,
     pop-server, pop-port, pop-ssh-server, pop-ssl, pop-ssl-port,
     pop-user, pop-auth, pop-auth-list,
     pop-size, pop-header-only, pop-delete, pop-body-lines,
     pop-proxy-server, pop-proxy-port,
     imap-server, imap-port, imap-ssh-server, imap-ssl, imap-ssl-port,
     imap-user, imap-auth, imap-auth-list,
     imap-size, imap-header-only, imap-delete,
     imap-trash-folder, imap-queue-folder, imap-spam-field, imap-spam-word,
     imap-proxy-server, imap-proxy-port,
     nntp-server, nntp-port, nntp-ssh-server, nntp-ssl, nntp-ssl-port,
     nntp-user, nntp-size, nntp-header-only,
     nntp-msgid-user, nntp-msgid-domain,
     ssl-cert-directory, ssl-verify-level,
     inbox-folder, queue-folder, postq-folder,
     mailbox-type, mbox-command, mbox-command-arg,
     signature-file, content-type, refile-guess-alist,
     spam-prog, spam-prog-args, ham-prog, ham-prog-args,
     use-old-pgp, pgp-signer, smime-signer, privacy-method,
     protect-privacy-always, protect-privacy-always-type,
     protect-privacy-encrypted, protect-privacy-encrypted-type,
     protect-privacy-with-old-pgp-signature,
     use-format-flowed

name、user、mail-domain は以下の規則にしたがって、From: の値になります。

     from = name <user@mail-domain>

自分で mew-from-list を設定していない場合は、上記のルールに従い各ケースの from を集めて、mew-from-list が自動的に設定されます。 See cheader を参照のこと。

mew-config-alist に設定したケース名をケースに指定できます。Mew の起動時のケースは、"default" になっています。

Summary モードにおいて、ケースを変更するには C を利用します。ケースには、TAB で補完、C-cTAB で循環的な補完が効きます。

ケースが "default" 以外の値をとった場合は、Summary モードのモードラインに表示されます。以下はケースが "home" となっている場合の例です。

     (Summary home)

Draft モードでは、ケースが "default" でない場合、モードラインにその値が表示されます。以下は、ケースが "home" である場合の例です。

     (Draft home)

Draft モードにおいて、その草稿のケースを変更するには、C-cC-o を用います。mail-domain キーや header-alist キーに対応する値に応じて、ヘッダが動的に変更されます。なお、このケースは、その Draft モードに固有になります。

Draft モードでは、ケースを自動的に設定することもできます。

mew-case-guess-when-prepared
     この変数が t の場合、草稿が用意されたときに、 mew-case-guess-alist に従ってケースが設定される。初期値は t。

mew-case-guess-when-composed
     この変数が t の場合、メッセージが作成されたときに、 mew-case-guess-alist に従ってケースが設定される。初期値は nil

mew-case-guess-when-replied
     この変数が t の場合、返答によって草稿が用意されたときに、 mew-case-guess-when-replied-alist に従ってケースが設定される。初期値は t。

mew-case-guess-alist と mew-case-guess-when-replied-alist の書式は、mew-refile-guess-alist と同じです。詳しくは、 see by-alist を参照して下さい。

Draft モードで草稿を送信するために C-cC-c を使うと、Draft モードのケースが SMTP/NNTP サーバなどを決定するために利用されます。Summary モードで +queue/+postq のメッセージを送り出すために C-cC-c を利用すると、Summary モードのケースが利用されます。たとえ、そのケースが Draft モードで指定されていたケースと違ってもです。Summary モードで C-uC-cC-c を使うと、+queue/+postq のメッセージを送り出すためのケースが指定できます。

以下にケースに関するコマンドをまとめます。

C
     Summary モードにおいて、ケースを設定する。

C-cC-o
     Draft モードにおいて、その草稿のケースを設定する。

設定の書式
=====

Mew 6.1 から ".mew.el" の設定方法が改善されました。古い書式も有効ですが、より簡単な新しい書式も利用できます。

  - 古い書式ではリストの中に "." が現れる場合がありました。新しい書式では、 "." はまったく使われません。たとえば、("foo" . "bar") と書いていたところは、("foo" "bar") と書けます。

  - 古い書式では、ポート番号は文字列で書いていました。たとえば、"25" です。新しい書式では、数値で書いてもよくなりました。たとえば、25 です。文字列も有効です。たとえば、"smtp" です。

  - 古い書式では、mew-config-alist のケースやキーを文字列で書いていました。新しい書式では、シンボルで書けます。

以下に mew-config-alist を新しい書式で書いた例を示します。

     (setq mew-config-alist
           '((home
              (imap-server       "imap.example.org")
              (imap-ssl          t)
              (imap-ssl-port     993)
              (smtp-server       "smtp.example.org")
              (smtp-port         "submission"))))

以下の古い書式と見比べて下さい。

     (setq mew-config-alist
           '(("home"
              ("imap-server"   . "imap.example.org")
              ("imap-ssl"      . t)
              ("imap-ssl-port" . "993")
              ("smtp-server"   . "smtp.example.org")
              ("smtp-port"     . "submission"))))

繰り返しますが、Mew 6.1 では古い書式も有効です。古い書式と新しい書式を混ぜて書いても構いません。

その他
===

環境によっては、添付ファイルをセーブする際に、ファイル名を SAMBA 形式にすると便利なことがあります。この場合、mew-use-samba-encoding を t にして下さい。ファイル名として、どの文字コードを利用するかは、 mew-cs-samba で指定できます。初期値は shift_jis です。

Summary モードで # と押すと、現在のメッセージを印刷できます。印刷に利用する関数は mew-print-function で定義します。初期値は、 ps-print-buffer ですから、PostScript に変換されて印刷されます。自分の作成した関数を利用するには、以下のように設定します。

     (setq mew-print-function 'my-print-function)

ヘッダ中のどのフィールドを印刷するかは、mew-field-for-printing で指定できます。初期値は、以下のようになっています。

     '("Subject:" "From:" "To:" "Cc:" "Date:")

たとえば、Subject:、From:、Date: のみを印刷するには、以下のように設定しましょう。

     (setq mew-field-for-printing '("Subject:" "From:" "Date:"))

さらなる一歩
******

リージョン
=====

Summary モードには、C-u 付きで呼び出すと、リージョンに作用するコマンドがあります。これらのコマンドは、ビジブルなリージョンが指定されている場合は、C-u なしでもそのリージョンに作用します。

Emacs では、以下の設定を "~/.emacs" に入れると、ビジブルなリージョンが利用できるようになります。

     (transient-mark-mode 1)

以下に、該当するコマンドを列挙しておきます。

     ?, /, tt, x, lx, ma, Md, S, mlc, mli, *, $, d, u

*, $, d, u は、直前に数字を入力することで、繰り返しの回数を指定することもできます。たとえば、3* は 3 つのメールに * マークを付けます。数字の前に C-u は不要です。

移動
==

Draft モードにおいて、C-cC-m でメッセージを作成し送信キューに入れた後、+queue に移動したい場合は、 mew-visit-queue-after-sending を t に設定して下さい。

Summary モードにおいて、C でケースを設定した後に、各 inbox に移動したい場合は、mew-visit-inbox-after-setting-case を t に設定しましょう。

Summary モードから、一番数字の小さい草稿(Draft モード)に移動するには、 C-cC-o が利用できます。

Secure SHell
============

Mew は SSH として、SSH バージョン 1、2 および OpenSSH をサポートしています。Mew から SSH を利用する前に、必ずコマンド・ラインで "ssh" を実行し、SSH サーバの公開鍵を取得して下さい。すなわち、ユーザのパスワードか、ローカルのマシンの秘密鍵を復号化するためのパスワードを入力すれば、サーバにログインできる状態にして下さい。なお、"ssh-agent" を利用すれば、秘密鍵を復号化するためのパスワードの入力を省略できます。

後は、各プロトコルの SSH に関する変数を設定して下さい。たとえば、POP over SSH を利用する場合は、mew-pop-ssh-server に SSH サーバの名前を設定しましょう。

SSH で通信が保護されている場合、モードラインに錠前の絵が表示されます。

Mew の実装では、SSH と SSL/TLS を同時には使えません。SSH トンネルの中で SSL/TLS を使う必要がある場合、Mew では SSL/TLS だけを設定し、SSH トンネルはコマンドラインから張るようにして下さい。

Secure Socket Layer
===================

SSL を使うには、認証局方式の信用モデルを理解している必要があります。現在、Mew は SSL のために "stunnel" バージョン 3、4、5 をサポートしています。

Mew で利用する前に、SSL サーバに対して "stunnel" で SSL のコネクションが張れるか確かめて下さい。"stunnel" は、"openssl" のライブラリをリンクしているので、"openssl" の知識が必要です。

信用する証明書を保存しておくディレクトリを "~/.certs" だとしましょう。ここに "openssl" の "certs" ディレクトリに付いてくる PEM 形式の証明書を "<ハッシュ>.0" という名前でコピーします。

ここでは、PEM 形式の証明書のファイル名を "ca.pem" だとしましょう。「<ハッシュ>」は以下のように計算できます。

     % openssl x509 -hash -noout -in ca.pem

"~/.certs/" へコピーするには、以下のようにします。

     % cp ca.pem ~/.certs/`openssl x509 -hash -noout -in ca.pem`.0

"openssl" に付いてくる証明書は、世の中で使われている CA すべてを網羅できていません。あなたが利用するサーバの証明書が、他の CA から発行された場合、その CA の証明書を同様にコピーしておく必要があります。以下のページに CA の証明書がたくさん置いてあります。

     http://www.columbia.edu/~ariel/good-certs/ns45/

Mew で "stunnel" を制御する重要な変数は 2 つです。 mew-ssl-cert-directory は、信用する CA の証明書を置いておくディレクトリであり、初期値は "~/.certs" です。また、 mew-ssl-verify-level で、証明書を検証するレベルを指定できます。レベルの初期値は 1 です。この意味は、以下の通りです。

0
     検証しない

1
     サーバの証明書があれば検証する。検証結果が失敗なら、SSL/TSL コネクションは作られない。証明書がなければ、SSL/TLS コネクションを作成する。

2
     サーバの証明書を検証する。検証結果が失敗なら、SSL/TSL コネクションは作られない。証明書がなければ、SSL/TLS コネクションを作成しない。

3
     サーバが送ってきたものではなく、ローカルにインストールされている証明書で検証する。

後は各プロトコルの SSL に関する変数を設定して下しさい。たとえば、POP over SSL を利用するには、mew-pop-ssl を t にします。また、ポート番号が標準と異なる場合には、mew-pop-ssl-port を設定して下さい。

     (setq mew-pop-ssl t)

SMTP で SSL を利用する場合は、以下のようにします。

     (setq mew-smtp-ssl t)

SSL で通信が保護されている場合、モードラインに錠前の絵が表示されます。

Transport Layer Security
========================

Mew では SSL の代りに TLS を利用することもできます。TLS の実現は、SSL と同様 "stunnel" に頼っています。ですので、TLS を利用する際には、 see SSL の説明に従って設定して下さい。

次に、SSL のポート番号を守りたいプロトコルと同じポート番号に設定します。たとえば、POP では以下のようにします。

     ;; mew-pop-port is default to "pop3" (110)
     (setq mew-pop-ssl t)
     (setq mew-pop-ssl-port mew-pop-port) ;; The default is "pop3s" (995)

すなわち、SSL のポート番号と保護したいプロトコルのポートが同じであれば TLS、異なれば SSL が利用されます。

以下は、Message Submission を TLS で守るための設定例です。

     (setq mew-smtp-port "submission") ;; The default is "smtp" (25)
     (setq mew-smtp-ssl t)
     (setq mew-smtp-ssl-port mew-smtp-port) ;; The default is 465

スパム
===

(1) スパムのフィルタが POP サーバや IMAP サーバ側で動いている場合：

POP で +inbox にメッセージを取得したり、$inbox や %inbox でメッセージの一覧を取ったりする場合に、スパムに自動的に D マークを付けることができます。

Bogofilter を利用している場合は、以下の設定を "~/.mew.el" に入れて下さい。

     (defun mew-spam-bogofilter (val)
       (let ((case-fold-search t))
         (if (string-match "yes" val) ?D)))

     (setq mew-inbox-action-alist
           '(("X-Bogosity:" mew-spam-bogofilter)))

D マークを付ける代わりに、+spam フォルダへリファイルするように o マークを付けるようにするには、関数を以下のように記述します。

     (defun mew-spam-bogofilter (val)
       (let ((case-fold-search t))
         (if (string-match "yes" val) "+spam")))

Spamassassin の場合は、以下の設定を "~/.mew.el" に入れて下さい。

     (setq mew-spam: "X-Spam-Flag:")
     (defun mew-spam-assassin (val)
       (let ((case-fold-search t))
         (if (string-match "yes" val) ?D)))

     (setq mew-inbox-action-alist
           '(("X-Spam-Flag:" mew-spam-assassin)))

bsfilter を使う場合は、bsfilter に含まれているマニュアルを参照して下さい。

(2) スパムのフィルタが IMAP サーバ側で動いている場合：

%inbox でメッセージの一覧を取る際に、IMAP サーバの中でスパムを消去、または、他のフォルダへ移動させることができます。Bogofilter を利用している場合は、以下のような設定を "~/.mew.el" に加えて下さい。

     (setq mew-imap-spam-field "X-Bogosity")
     (setq mew-imap-spam-word "Yes")

mew-imap-spam-folder あるいは mew-imap-trash-folder が定義されていれば、そのフォルダへスパムが移動します。そうでなければ、スパムは消去されます。

(3) ローカルで bogofilter を動かして、一括して * マークを付ける方法もあります。まず、以下のスクリプトをインストールして下さい。

     #!/bin/sh

     bogofilter -v -T -B $* | grep S

このスクリプト名を "bogo" だとしましょう。Summary モードで ? を実行し、RET を入力し、コマンド名に "bogo" を指定すれば、スパムに * マークが付きます。あとは、md + x などで処理するといいでしょう。

(4) POP サーバを利用しており、サーバ側ではスパムのフィルタを動かせないが、メッセージの取得時にマークを付けたい場合：

bsfilter は、POP の代理サーバとなる機能があるので、これを実現できます。詳しくは bsfilter に含まれているマニュアルを参照して下さい。

スパム(2)
======

Summary モードで読んでいる現在のメッセージを、フィルターにスパムとして学習させるには ls を使います。同様に、ハム(スパムでないメッセージ)として学習させるには lh を利用して下さい。

両者のコマンドを使用するためには、4 つの変数を設定しておく必要があります。ここでは bogofilter を例題にとり、3 つの場合について説明します。

(1) ローカルのフィルターに学習させる場合：

     (setq mew-spam-prog "bogofilter")
     (setq mew-spam-prog-args '("-s" "-N" "-v"))
     (setq mew-ham-prog "bogofilter")
     (setq mew-ham-prog-args '("-n" "-S" "-v")))

(2) サーバ(<server>)側のフィルターに SSH 経由で学習させる場合：

     (setq mew-spam-prog "ssh")
     (setq mew-spam-prog-args '("<server>" "bogofilter" "-s" "-N" "-v"))
     (setq mew-ham-prog "ssh")
     (setq mew-ham-prog-args '("<server>" "bogofilter" "-n" "-S" "-v")))

(3) ファイアウォール(<firewall>)の先のサーバ(<server>)のフィルターに多段の SSH 経由で学習させる場合：

     (setq mew-spam-prog "ssh")
     (setq mew-spam-prog-args '("-A" "<firewall>" "ssh" "<server>" "bogofilter" "-s" "-N" "-v"))
     (setq mew-ham-prog "ssh")
     (setq mew-ham-prog-args '("-A" "<firewall>" "ssh" "<server>" "bogofilter" "-n" "-S" "-v")))

なお SSH を利用する場合、関連するホストには、パスワードなしでログインできるように設定しておく必要があります。

アドレスの警告
=======

社内で閉じるべきメッセージの宛先に、うっかり社外の人のアドレスを書いてしまうことがあります。Mew では、たとえば社内のドメイン名を列挙しておくと、社外のアドレスを赤色にして警告してくれます。

どのアドレスを警告するのかを決定する変数は 4 つあり、すべて文字列のリストになります。Mew は以下のルールに従って、警告するアドレスを決めます。

 1. アドレスが mew-safe-addresses で指定されていれば警告しない。

 2. アドレスが mew-warn-addresses で指定されていれば警告する。

 3. ドメインが mew-safe-domains で指定されていれば警告しない。

 4. ドメインが mew-warn-domains で指定されていれば警告する。

 5. mew-warn-addresses か mew-safe-domains が定義されていれば警告する。

 6. 警告しない。

以下に "@example.org" 以外のドメインを持つアドレスを警告する例を示します。

     (setq mew-safe-domains '("example.org"))

ドメインは "@example.org" ですが、"customers@example.org" は警告したい場合は、さらに以下のように設定します。

     (setq mew-warn-addresses '("customers@example.org"))

Biff
====

メッセージが到着したか定期的に調べる機能を biff といいます。Mew では、以下の設定をすると、5 分ごとに新規メッセージが何個あるか調べるようになります。

     (setq mew-use-biff t)

新規メッセージがあれば、その数がモードラインに表示されます。

Biff の対象となるサーバとプロトコルは、Mew の起動時に mew-proto とケース(mew-case)から決定されます。

以下の設定をすると、新規メッセージがない状態からある状態に変った際に、ビープ音が鳴ります。

     (setq mew-use-biff-bell t)

メッセージの到着を調べる間隔を変えるには、mew-biff-interval を設定して下さい。以下は、10 分にする例です。

     (setq mew-biff-interval 10)

Edit モード
========

Edit モードは、既存のメッセージを編集し、新しいメッセージを作成するためのモードです。用途の典型例を以下に示します。

  - 大きな添付ファイルを削除して保存する

  - PGP/MIME や S/MIME で暗号化されたメッセージを復号化した状態で保存する

現在のメッセージを Edit モードで編集するには、M-eを押します。すると、Draft モードに似た形で草稿が用意されます。Edit モードでは、Draft モードと同様の操作で、メッセージを編集できます。

編集したメッセージを新しいメッセージとして保存するには、C-cC-cか C-cC-mを使います。両者は、まったく同じコマンドです。これらのコマンドを実行すると、どのフォルダに保存するかを訊いてきます。

なお、この機能は再編集(see sum-write)と混同しやすいので注意して下さい。再編集は編集後に送信するのに対し、Edit モードでは編集の後に保存します。

以下に Edit モードのまとめを示します。Summary モードから Edit モードに入るには以下のコマンドを使います。

M-e
     現在のメッセージを元に Edit モードに入る。

Edit モードでのコマンドをまとめます。

C-cC-c
     編集したメッセージを新しいメッセージに保存。

C-cC-m
     C-cC-cに同じ。

その他
     Draft モードと同じ。

メッセージの作法
********

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

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

To: と Cc: を正しく書く
     To: が目的の人で、Cc: は参考までに送り付ける人です。自分のアドレスが Cc: の場合は、読み飛ばす人がいますから注意して下さい。また、不必要なアドレスを To: や Cc: に書いて、相手に迷惑をかけてしまうことがないようにしましょう。

To: と Cc: に書くアドレスの数は少なくする
     アドレスをたくさん To: や Cc: に書くのはよくないことです。面倒でもメーリングリストを作りましょう。あるいは、必要に応じて宛先を匿名にしましょう (see anonymous)。

Subject: には本文の内容を的確に短く書く
     Subject: を見て読むか決める人がいますから、不適切な Subject: だと読んでもらえないかもしれません。長い Subject: は読みにくいので止めましょう。

必要な部分だけを引用する
     面倒でも不要な部分は削りましょう。Mew を使っていれば、引用は楽勝のはずです。

シグニチャは簡素にする
     長いシグニチャは単なる自己満足です。

いたずらメッセージを送らない
     こんなことは注意したくありませんが、それでも不幸のメッセージなどを送ってくる人がいます。人格を疑われることを理解すべきです。

相手の読めるデータのみを添付する
     なんの合意もなしに送ってよいデータはテキストのみです。それ以外のデータを送る場合は、あらかじめ相手に送ってよいか確認をとりましょう。メーリングリストには、テキストのみを投稿するのが無難でしょう。

また、インターネットのマナーは RFC1855 を読むといいでしょう。

実装について
******

"mewl" と "mewencode" が必要なのはなぜ？
     Mew では、Summary mode でメッセージを取得している間や、一覧を再表示している間に、メッセージを読み進めることができます。これは、プログラムの制御の流れが複数必要であることを意味しています。Emacs で制御の流れを複数にするには、サブプロセスを作るか、TCP コネクションを張るしか方法がありません (Emacs Lisp には light weight process がありません)。POP や SMTP には、 TCP コネクションを使うので問題ありません。しかし、Summary mode の一覧を再表示するためには、何かコマンドを起動しないといけません。これが、 "mewl" が存在する理由です。"mewencode" が存在する理由は、単に速度のためです。MIME の符号化を Emacs Lisp で実装したところ、使い物にならないぐらい遅かったので、"mewencode" を使い続けています。(ただし、Base64 が Emacs で実装されていれば、そちらを使います。)

文字列検索(C-s、C-r)すると、行末にカーソルが飛ぶのはなぜ？
     Summary mode において、スレッド情報は表示されません。これは、Summary mode で表示されている行に関しては、表示する瞬間にスレッド情報に非表示の属性を付けるからです。非表示の属性がついている部分は文字列検索の対象にはなりません。しかし、Summary mode に表示されていない行のスレッド情報は、非表示の属性がついていないため、検索の対象となります。そして、合致した行が表示される際に非表示の属性がついて、あたかも行末に合致したかのような錯覚を受けます。Summary mode 全体の行のスレッド情報には、キーの入力がない時間に非表示の属性が付きます。全体に非表示の属性が付くと、 Summary mode のモードラインの右端にある * マークが消えます。この状態では、文字列検索が直感通りに働きます。

Mew 4.3 でファイルを添付すると MS のメールリーダでファイル名が認識できるようになりました
     MS のメールリーダは、ファイル名を符号化する際に、標準化されてない独自の方法を使います。MS のメールリーダが、標準化されている符号化方式に移行すればいいのですが、何度お願いしても無理でした。そこで、Mew では以下のような方法で、この問題を解決しました。すなわち、Mew は基本的には標準化されている方法で、ファイル名を符号化します。それに加えて、MS のメールリーダが参照する標準化されてないパラメータに対して、ファイル名を MS 独自の方法で符号化し、付加します。

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

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

Mew の入手方法
=========

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

     http://www.Mew.org/Release/

Mew の Git 版について知りたければ、以下を参照して下さい。

     http://www.mew.org/ja/git/

メーリングリスト
========

Mew に関するメーリングリストについては、以下を参照して下さい。

     https://groups.google.com/forum/#!forum/mew-ja

著作権について
*******

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

Copyright (C) 1994-2018 Mew developing team.

All rights reserved.

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

 1. ソース・コードの再配布は、上記の著作権表示、この条件項目、および、以下の免責事項を保存しなければならない。

 2. バイナリ形式の再配布は、上記の著作権表示、この条件項目、および、以下の免責事項を、その配布に付随する説明書、あるいはその他の資料のいずれかに明記しなければならない。

 3. 前もって特別に許諾を得ない限り、このソフトウェアから派生した製品の推奨や販売促進のために、このチーム名と貢献者達の名前を利用してはならない。

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

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

このマニュアルの著作権は、著者に属します。複製、改変、再配布は自由ですが、無保証です。また、このマニュアルから発生した被害に対し、著者は一切責任を負いません。