IMAP4 README [10/02/2002]
-------------------------

概要
----

cmail で IMAP4 を利用するためのオプションです。外部ライブラリとして
siamp4.el を使用します。(cmail 配布ファイルに最新の simap4.el が 
contrib/simap4/ に添付されています。)

次の機能を cmail に追加します。

  o IMAP4 サーバ上のフォルダを cmail フォルダとして閲覧する。
  o メッセージを IMAP4 サーバから取り込んで読む。以下のオプションが
    使用可能。
    o あらかじめメッセージ全部をダウンロードする。
    o ヘッダだけダウンロードして、本体は表示時に取り込み、表示する。
    o 大きなメッセージの場合、部分的に(可能ならば text 部分のみの
      表示をおこない添付ファイル等は必要に応じてダウンロードする。
  o IMAP4 サーバ上でメッセージのコピー、削除、移動を行う。
  o IMAP4 サーバからローカルフォルダへのコピー、移動を行う。
  o Reply マーク等をサーバに反映する。
  o IMAP4 フォルダの削除と名前変更を行う。

さらに詳しい仕様については、この文書の最後の方に「仕様」の項があります
ので参照してください。


動作が確認されている環境
------------------------

  [Emacs]

  o GNU Emacs 20.6/20.7
  o Meadow 1.10, 1.14
  o Mule 2.3 on GNU Emacs 19.34

  [IMAP4rev1 Server]

  o Microsoft Exchange IMAP4rev1 server version 5.5.2652.68 
  o Cyrus IMAP4 v1.6.22
  o WU-IMAP4


インストール手順
----------------

1. simap4 パッケージをインストールします。cmail の配布ファイルに梱包さ
   れています。contrib/simap4 ディレクトリを参照ください。


2. 通常通り cmail のコンパイルおよびインストールを行います。


設定する項目
------------

1. cmail-use-simap4 を on にします。

   M-x customize-group <CR> cmail-simap4-group <CR>

cmail-use-simap4 を toggle して ON にします。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/- Cmail Simap4 Group group: --------------------------------------------\
      [State]: something in this group has been set and saved.
   simap4.elを利用してIMAP4サーバにアクセスするための設定。

Cmail Use Simap4: [Hide] [Toggle]  on (non-nil)
   [State]: this option has been set and saved.
Non nil ならば simap4.el を利用して IMAP4 サーバにアクセスする。

Cmail Simap4 Servers: [Show]
   State: hidden, invoke "Show" in the previous line to show.
Simple IMAP4 用のサーバ設定。 [More]

Cmail Simap4 Search Key List: [Show]
   State: hidden, invoke "Show" in the previous line to show.
検索文字列をたずねてくる検索キーの順番。 [More]

Cmail Simap4 Fetch Mode: [Hide] [Value Menu] Partial Download
   [State]: this option has been set and saved.
メッセージをどのように取り込むか。 [More]

Cmail Simap4 Num Msg Cache: [Hide] 100
   [State]: this option has been set and saved.
headers-only 取込モードでいくつのメッセージをメモリにキャシュするか。

\- Cmail Simap4 Group group end ----------------------------------------/
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


2. cmail-simap4-servers にサーバエントリを追加します。上記 Simap4
   group から Cmail Simap4 Servers を変更できます。または

   M-x customize-variable <CR> cmail-simap4-servers <CR>

   で直接呼び出せます。各設定項目の詳細は変数の説明を御覧ください。

   以下は設定の例です。mail.cybermail.net のサーバ上で tm というアカウ
   ントにアクセスし、ローカルファイルシステム上で Cybermail というディ
   レクトリを通じてアクセスする設定です。TEST-DONT-USE というフォルダ
   は、同期しないように、隠しmailbox として登録しています。INBOX.test
   で始まる mailbox も正規表現で、隠しmailbox として登録していましたが
   下ではコメントアウトしている状態です。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Cmail Simap4 Servers: [Hide]
[INS] [DEL] List:
            Record Format: 1.2
            Record State: [Value Menu] Record active
            Server: mail.cybermail.net
            UserID: tm
            TopDir: Cybermail
            Virtual Folder: [Value Menu] Don't use virtual folder
            Mailboxes to Hide:
            [INS] [DEL] String: TEST-DONT-USE
            [INS] [DEL] String: ;; regexp: ^INBOX\.test.*
            [INS]
            DraftMbox: 
            CFfile: 
            Startup Folder Sync Mode: [Value Menu] Default (See note)
            Folder Sync Mode: [Value Menu] Quick scan (See note)
            Flag synchronization option: [Value Menu] Don't sync flags
            Mailboxes to sync (See notes):
            [INS] [DEL] String: INBOX
            [INS]
            Default regexp for mailboxes to search (See notes): ^INBOX.*
            Message fetch mode: [Value Menu] Headers Only
            Message max size: 40000
            Message part/body size: 8000
            Connection Timeout: 60
            Server Response Timeout: 20
[INS]
   [State]: this option has been set and saved.
Simple IMAP4 用のサーバ設定。 [Hide]

各フィールドは次の意味になります。

Record Format: レコードのフォーマットバージョン。変更できません。
Record State: このサーバに接続したくない場合 inactive にします。
Server: IMAP4 サーバ名。
UserID: IMAP4 サーバにログインする時のユーザ識別文字列。
TopDir: ローカルホスト上のディレクトリ。cmail-path から相対パス。
        設定されていなければユーザID@サーバ名がディレクトリとな
        ります。
Virtual Folder: ローカルホスト上で仮想フォルダを使用するか。仮
        想フォルダだと、cmail 終了時ダウンロード情報は消えてし
        まいます。
Mailboxes to Hide: フォルダ同期で無視する mailbox 名の文字列の
        リスト。 "regexp: " で始まる場合正規表現とみなされます。
DraftMbox: ドラフトを保存する mailbox 名の文字列。(まだサポート
        してません。)
CFfile: このサーバ専用の自動分類ルールなどを保存するファイル名。
        (まだサポートしてません。)
Startup Folder Sync Mode:  スタートして最初の同期をどのようにとるか。
        Default: 仮想フォルダを使用していない場合 Quick scan を使う
                 仮想フォルダを使用していない場合 Full sync を使う
        Desginated folders only: "Mailboxes to sync" に設定された
                 mailbox のみを同期する。フラグが更新されるかどうか
                 はFlag synchronization option の値による。
        Quick scan: 隠されていない mailbox をすべてチェックし新しい
                 メールが来ていれば同期する。フラグの更新があったか
                 はチェックされない。同期にいく場合、フラグが更新
                 されるかどうかはFlag synchronization option の値
                 による。
        Full sync: 隠されていない mailbox はフラグの更新を含めて
                 同期される。
Folder Sync Mode: 新しいメールを取りにいくコマンドがフォルダ一覧
        モードで実行された時に(M-x cmail-folders-get-newmail)同期
        をどのようにとるか。値は Default を除き Startup Folder Sync
        Mode と同様。
Flag synchronization option: 新しいメッセージが到着しているなどで
        フォルダの同期をとるとき、Full sync 以外のオプションで
        フラグの同期をおこなうかどうかがきまる。 "Sync flags as
        well" の場合は、ローカルコピーにあるメッセージもフラグが
        サーバ上で更新されていれば同期される。そうでなければフラグ
        は更新しない。
Mailboxes to sync: フォルダ同期を行う mailbox 名の文字列の
        リスト。"regexp: " で始まる場合正規表現とみなされます。
        "Mailboxes to hide" が優先されます。
Default regexp for mailboxes to search: デフォルトの検索対象メール
        ボックスの名前にマッチする正規表現。cmail のフォルダではな
        くサーバ上のメールボックスの名前であることに注意。検索に
        際して入力を求められるのでその場で変更可能だが、Enter だけ
        で空文字列が入力された場合このデフォルトがメールボックスの
        選別に使用される。
Message fetch mode: メッセージがどのようにダウンロードされるかを
        指定する。
        Default: 仮想フォルダでは無い場合、大域変数の
                 `cmail-simap4-fetch-mode' の指定に従う。
                 仮想フォルダの場合、 Headers only/No cache を使用。
        Unspecified: 大域変数の `cmail-simap4-fetch-mode'
                 の指定に従う。
        Headers only: `cmail-simap4-fetch-mode' を参照
        Headers only/Local cache: `cmail-simap4-fetch-mode' を参照
        Partial Download: `cmail-simap4-fetch-mode' を参照
        Full Download: `cmail-simap4-fetch-mode' を参照
Message max size: メッセージのダウンロードを制限するために使用さ
        れる上限サイズ。単位 Byte.
Message part/body size: メッセージパートのダウンロードを制限する
        ために使用される上限サイズ。単位 Byte.
Connection Timeout: サーバに接続する時のタイムアウト値(秒)
Server Response Timeout: サーバの応答を待つ時のタイムアウト値(秒)
Parent groups: [Cmail All Variables] [Cmail Simap4 Group]
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

[*] 設定事項のうち TopDir の項目は、サーバのフォルダが展開される
    フォルダディレクトリの名前です。例えば
      cmail-path が ~/Mail/
      TopDir が Cybermail
    の時、この IMAP4 サーバの INBOX は
      ~/Mail/Cybermail/INBOX
    として展開されます。

    この TopDir が設定されていない時には user@server がかわりに使用さ
    れます。すなわち
      cmail-path が ~/Mail/
      TopDir が nil
      UserID が tm
      Server が mail.cybermail.net
    の時、この IMAP4 サーバの INBOX は
      ~/Mail/tm@mail.cybermail.net/INBOX
    として展開されます。


3. その他のカスタマイズ可能な変数の説明を参照の上適宜変更してください。
   その後オプションをセーブします。

[*] Customize 機能が使えない環境の場合は setq で適宜設定してください。
    以下は setq での .emacs の設定の例です。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
(setq cmail-use-simap4 t)
(setq cmail-simap4-servers
      '(("1.2" nil "mail.cybermail.net" "tm"
	 "Cybermail-1934" nil
	 ("TEST-DONT-USE" ";; regexp: ^INBOX\\.test.*")
	 "" "" default quick-scan nil ("INBOX")
	 "^INBOX.*" default 40000 8000 60 20))

(setq cmail-simap4-max-body-size 1500)
(setq cmail-simap4-max-msg-size 8000)
(setq cmail-simap4-fetch-mode 'headers-only)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


4. cmail を起動します

インストールがうまくいっていれば自動的に INBOX を取込みにいきます。

5. Folder モードから G を押す。

サーバ上のフォルダを全同期します。


使い方
------

特に特殊な使い方はありません。スタートすると接続できればサーバとの同期
を始めます。cmail-simap4-servers 内の TopDir で指定されたフォルダディ
レクトリにサーバから読み込んだフォルダを作成しますので、フォルダ一覧モー
ドから任意のフォルダにアクセスできます。

またサマリから g を押すとメールがあって接続できれば取り込みます。この
時サーバとの同期も行われます。

表示させると、ヘッダのみがダウンロードされている場合メッセージを動的に
ダウンロードに行きます。

次のようなメッセージが出ている場合、メッセージの一部しかダウンロードさ
れていませんので、必要に応じて C-c SPC を実行して全体のダウンロードを
行ってください。(転送する時の自動的ダウンロードする機能はまだありませ
んのでお気をつけください。)

========================================================================
Date: Sun, 30 Jul 2000 20:13:57 -0500 (CDT)
From: Takeshi Morishima <tm@interaccess.com>
To: tm@cybermail.net
Subject: TEST:Sun Jul 30 20:13:56 CDT 2000

[**CMAIL-SIMAP4** Content is truncated due to size limitation.]
[**CMAIL-SIMAP4** Use C-c SPC to download full message.]
========================================================================

途中で接続が切れた場合など通常の使用状況でない場合で変な現象が見られ
るかも知れません。できればデバッグしてパッチ送ってくださると嬉しいです。

オフライン時にサーバにアクセスする度に長いあいだ待たされるなどの現象が
あって使い勝手が悪い場合は online.el を使用すると、操作性があがると思
います。オンラインかオフラインかの表示をモードラインにだすこともできま
すのでご利用ください。cmail 配布ファイルの contrib/online/ に添付され
ています。


注意
----

  MS Exchange サーバなどで INBOX の下に INBOX/Large などのフォルダある
  場合に同期に失敗します。またこれらのフォルダにはアクセスできません。
  これは現在の cmail のフォルダ取扱いをどうにかしないとどうにもならな
  いと思います。この場合は申し訳ありませんが INBOX の下のフォルダを
  outlook や netscape など別の MUA で適宜移動するかあきらめましょう。
  これはなんとかしたいのですが、すぐになんとかできるものでなさそうです。
  よいアイデアがあれば教えていただければ嬉しいです。


仕様
----

1. imap4 のメールボックスの表現について

 o cmail-path の下にサーバディレクトリを儲けその下に imap4 メールボッ
   クスを配置してます。


2. メッセージ状態の同期について

 o cmail 起動時に IMAP4 フォルダの同期を始めます。必要の無いフォルダは
   設定で隠しフォルダとして設定する事ができます。

 o フォルダモードから G を入力すると自動に全ての imap4 フォルダを同期
   に行きます。この時の動作は cmail 起動時と同じです。

 o サマリから G を入力するとそのフォルダのみで同期します。

 o R mark や U mark は Answered, Unseen の imap4 flag としてサーバに保
   存されます。

 o imap4 サーバが keyword をサポートしている場合は Bookmarked,
   Forwarded, Hold のマークが imap4 keyword としてサーバに保存されます。

   * サーバが keyword をサポートしているかどうかを調べる簡単な方法は現
     在実装していません。virtual folder モードで使ってみるか、複数のク
     ライアントから、cmail を使用した時 Hold やBookmarked マークがあと
     に立ち上げた方できちんと反映されない場合、サーバがサポートしてい
     ないと考えられます。

 o G で同期をおこなうと、サーバのマークがローカルに反映されます。別の
   クライアントが変更したマークなど、同期しないと反映されません。

 o 同期時は Hold mark 以外はサーバのステータスが反映される様になってい
   ます。ローカルキャッシュのみにあるステータスは失われます。
 
 o 同期時に不整合のあるメッセージでローカルキャッシュに存在しサーバに
   存在しないものはローカルキャッシュから消去確認なしに削除されます。

 o オンライン時 D/R mark はその都度サーバに反映されます。ただし操作を
   軽くするためバックグラウンドで処理していますので、途中で接続が切れた
   場合などは正しくアップデートされない場合があります。

 o オフライン時のマーク更新情報は失われます。


3. メッセージのコピー、移動、自動分類について

 o 一応私の環境内で

     サーバ -> 同じサーバ
     サーバ -> ローカル

   の移動の動作は確認しています。

 o cmail-archive-on-get はまだ仕様が固まっていませんが、とりあえず有効
   になっています。初期のメッセージダウンロード後に分類が行われます。
   分類は INBOX に対して行われ、ローカルフォルダへの分類の場合は、メッ
   セージが full ダウンロードされます。

 o オフライン時のメッセージコピーと移動コマンドは拒否するようになって
   います。


4. メッセージ内容のダウンロードについて

 o サーバ -> ローカルのメッセージコピーまたは移動時は Full download
   にいきます。

 o 取り込み時にキャッシュへの完全ダウンロードか部分ダウンロードか、取り
   込みサイズ等を選択/変更できます。


5. メッセージアップロードについて

 o 一応 Cyrus IMAP4 v1.6.22 では

     ローカル -> サーバ

   のコピーは確認しています。


5. メッセージ内容の編集について

 o EDIT コマンドで変更されたメッセージ内容はサーバに反映されません。ロー
   カルキャッシュ上のみで変更となります。新たに、メッセージ内容がダウ
   ンロードされると、変更情報は失われます。ローカルフォルダにコピーし
   てから編集してください。その後サーバにコピーするとサーバにアップロー
   ドされます。ただし、置き換えではなく追加されますので、適宜古いメッ
   セージはご自分で消去ください。


6. フォルダのコピーおよび名称変更について

 o フォルダのローカルキャッシュの削除はサーバ上に反映されます。

 o 同じ IMAP4 サーバ上のみでの名称変更が可能です。変更先がローカル
   ディスクや別の IMAP4 サーバの場合は名称変更できません。

 o フォルダそのもののコピーはまだできません。メッセージを全選択してメッ
   セージコピーしてください。

 o UIDVALIDITY をチェックして、マッチしないとローカルキャッシュは無効と
   みなされます。この場合、ローカルキャッシュは削除され新たにフォルダの
   同期が行われます。

 o 現在、複数のクライアントで使用する場合、他のクライアント削除された
   フォルダーは自動的に同期(削除)されません。別途削除コマンドを利用し
   てください。

 o オフライン時のフォルダ移動と名称変更コマンドは拒否するようになって
   います。

7. フォルダの検索について

 o サーバ上でのフォルダの検索が可能です。サマリまたはフォルダ一覧モー
   ドから M-s (cmail-simap4-search) で起動できます。

 o 正規表現でマッチするフォルダをすべて検索します。

 o 検索条件は以下のものをサポートしています。ひとつだけ選べます。

   KEYWORD   - imap4 の keyword で検索します。cmail でサポートしている
               keyword は Bookmarked, Forwarded, Hold です。imap4
               サーバが keyword をサポートしていないとつかえません。
               サーバがサポートしているかどうかを調べる簡単な方法は
               現在ありません。比較的簡単な方法は virtual folder 
               モードで使ってみて、cmail を立ち上げなおした時 Hold や
               Bookmarked マークが消えている場合、サポートされていない
               と考えられます。
   FLAG      - imap4 の flag で検索します。フラグには Answered,
               Deleted, Draft, Flagged, New, Old, Recent, Seen,
               Unanswered, Undeleted, Undraft, Unflagged, Unseen
               などがありますが、使ってもあまり意味がなさそうなもの
               ばかりです。(ほとんどプログラムから使うものなので
               この条件での検索はそのうちなくすかもしれません。
   TEXT      - メッセージ全体（ヘッダと本文両方）の全文検索です。
   FROM      - From ヘッダフィールドの値に対して検索します。
   SUBJECT   - Subject ヘッダフィールドの値に対して検索します。
   HEADER    - 任意のヘッダのヘッダフィールドの値に対して検索します。
   TO        - To ヘッダフィールドの値に対して検索します。
   CC        - CC ヘッダフィールドの値に対して検索します。
   BODY      - メッセージ本文に対して検索します。

   検索条件をきいてきたとき何も入力せず <CR> をすると次の検索条件をき
   いてきます。cmail-simap4-search-key-list を変更すると、きいてくる順
   番がかわります。よく使う条件はリストのはじめの方に移動しておくと効
   率がよくなるかもしれません。なお検索文字列をサーバがどう使うのかは
   サーバの実装に依存します。一応日本語の検索もサーバが iso-2022-jp の 
   charset をサポートしていれば検索できると思います。(一応 Cyrus サー
   バで動作確認はしています。) 現在 charset は iso-2022-jp 固定でオプ
   ションでは変更できません。

 o 検索結果は仮想フォルダ +SEARCH-RESULT としてサマリ形式で表示されま
   す。検索にヒットするメッセージがあれば自動的にこの仮想フォルダを開
   きます。


A. まだ不十分なところで修正を予定していること:

 o エラーの扱い
   o エラー時必要に応じて TCP 接続をやり直す
   o 巨大な添付ファイルのダウンロードを始めた時 C-g が押された時に、
     TCP 接続を切って強制アボートさせる。

 o Offline 時の扱い
   o Offline での扱いが簡単な様にする。
   o Offline で mark されたD/R mark をサーバに反映させる
   o Expunge 動作をオフラインで拒否する。

 o Forward 時に X-cmail-*: のヘッダを取り去り、mime forward 時は完全
   ダウンロードしてから処理する。

 o サーバで既に削除されたフォルダはローカルにある場合それを削除する

B. まだ不十分なところだが修正をどうやるか悩んでいること:

 o 普通のフォルダの下にフォルダがある場合をどう扱うか。 (例えば
   INBOX と INBOX/test というふたつのフォルダは IMAP4 で存在でき
   るが、cmail では INBOX が存在すると INBOX/ というディレクトリ
   が存在できない。)

 o フォルダの階層を区別するための文字 [/] や [.] 等を cmail 上で
   どのように統一して扱うか。

 o Non-ascii のフォルダ名をどのように cmail 上で扱うか。


機能追加予定 (priority 順)
--------------------------

o cmail-simap4 内部にサーバ用のデータベースを持たせて top ディレクトリ
  での別名とサーバ毎に接続をチェックする外部関数等を用意できるようにす
  る。サーバ接続状況判断等を動的に行う hook 等。

o サーバ同期を INBOX 以外はフォルダ毎に、フォルダを開いた時に行うよう
  にするオプションを追加する。(フォルダがたくさんある場合でモデム経由
  でアクセスしている場合などに初期の同期に時間がかかるため。)

o imap4 server を使用した設定の保存

o imap4 server を使用したドラフト機能

o imap4 server を使用したメモ機能

o imap4 server を使用した bookmark 機能

o imap4 server を使用したスケジューラ機能 (MHC との統合?).

o 仮想フォルダサポート。

o フォルダのコピーサポート

o 移動/コピー先が imap4 サーバを完全サポート。

o INBOX をデフォルトのフォルダにせず、pop3 等でも個別のフォルダを取り
  込みフォルダとして処理する

EOF
