tm-edit 7.100 説明書（日本語版）
***********************

This file documents tm-edit, a MIME composer for GNU Emacs.

GNU Emacs 用の MIME composer である `tm-edit' について説明します。

What is tm-edit?
****************

tm-edit は GNU Emacs で動作する汎用的な MIME composer です。

tm-edit は GNUS の作者としても有名な 梅田 政信 <umerin@mse.kyutech.ac.jp> さんが書かれた mime.el を基に

  * RFC 1521/1522 化

  * Content-Disposition field ((tm-ja)Content-Disposition) (RFC 1806) の利用

  * 入れ子になった multi-part message ((tm-ja)multipart)

  * PGP (PGP)

  * file type における parameter の自動指定の強化

などの改良を行いました。

tm-MUA ((tm-ja)tm-MUA) では tm-edit を使うことにより、容易に MIME message を作成できます。

mime/editor-mode
****************

mime/editor-mode は MIME message を作成するための minor mode です。この mode では tag を使ってさまざまな種類の data を表現し、複数の部分からなる message ((tm-ja)multipart) を編集することを可能にしています。

tag には

  * single-part tag

  * multi-part tag

の２つがあります。

single-part tag は single part を表現するための tag で、

             --[[TYPE/SUBTYPE;PARAMETERS][ENCODING]
             OPTIONAL-FIELDS]

というような形をしています。

TYPE/SUBTYPE および PARAMETERS は Content-Type field ((tm-ja)Content-Type field) の type/subtype および parameters を表します。TYPE/SUBTYPE は必須であり、PARAMETERS は省略可です。

ENCODING は Content-Transfer-Encoding field を表します。これも省略可です。

OPTIONAL-FIELDS は Content-Type, Content-Transfer-Encoding 以外の field を書くための部分で、省略可です。

multi-part tag は multi part ((tm-ja)multipart) を表現するための tag で、

             --<<TYPE>>-@{

という形の multi-part 開始 tag と呼ばれる multi part の開始を示す tag と

             --@}-<<TYPE>>

という形の multi-part 終了 tag と呼ばれる multi part の終了を示す tag があります。

また、multi-part 開始 tag と multi-part 終了 tag で囲まれた部分を enclosure と呼びます。

single-part に対する操作
******************

single-part を作るための操作には以下のようなものがあります。

C-c C-x C-t
     text part を表す single-part tag を挿入します。

C-c C-x C-i
     file を MIME part として添付します。前に C-u を付けた場合、常に media-type, subtype 等を聞いて来ます。(cf. tag specification for inserted file)

C-c C-x C-e
     external part を挿入します。

C-c C-x C-v
     C-g が押されるまで録音を行い、音声 part を挿入します。（使用できない場合があります）

C-c C-x C-y
     現在表示中の (mail or news) message を挿入します。（実際の動作は使用している MUA に依存します）

C-c C-x C-m
     mail message を挿入します。

C-c C-x C-w, C-c C-x C-s
     signature を挿入します。

C-c C-x C-k
     PGP (PGP) の公開鍵を挿入します。

C-c C-x t
     任意の single-part tag を挿入します。

enclosure に対する操作
****************

enclosure を作るための操作としては以下のようなものがあります。

C-c C-x a
     指定した region を multipart/alternative として囲みます。

C-c C-x p
     指定した region を multipart/parallel として囲みます。

C-c C-x m
     指定した region を multipart/mixed として囲みます。

C-c C-x d
     指定した region を multipart/digest として囲みます。

C-c C-x s
     指定した region に電子署名を行います。(cf. PGP)

C-c C-x e
     指定した region を暗号化します。(cf. PGP)

C-c C-x q
     指定した region 内の tag を無効にし、その tag を文字列として利用できるようにします。（現在の版ではうまく働かないことがあります。また、電子署名との併用に関しても不完全です）

mime/editor-mode におけるその他の操作
***************************

mime/editor-mode におけるその他の操作を説明します。

C-c C-c
     編集中の message を送信します。

C-c C-x C-p
     編集中の message を preview します。 (cf. (tm-view-ja)mime/viewer-mode)

C-c C-x C-z
     編集中の message を送信することなく、mime/editor-mode を終了します。

C-c C-x ?
     help message を表示します。

C-c C-x /
     大きな message を送信する場合に message/partial 形式に自動分割可能とするかどうかを決めます。

C-c C-x 7
     transfer level (transfer level) を 7bit ((tm-ja)7bit) にします。

C-c C-x 8
     transfer level (transfer level) を 8bit ((tm-ja)8bit) にします。

C-c C-x v
     message 全体を電子署名するかどうかを決めます。(cf. PGP)

C-c C-x h
     message 全体を暗号化するかどうかを決めます。(cf. PGP)

C-c C-x ?
     help message を表示します。

挿入される file に対する tag の決定
***********************

C-c C-x C-i (mime-editor/insert-file) を実行した時、挿入される file に対する media-type や encoding などの tag の情報は変数 mime-file-types によって file 名から推測されます。

前に C-u を付けた時、および、適当な値が見付からなかった場合、user に対して値の入力を促します。（前に C-u を付けた時、推測された値が既定値として用いられます）

file 名に対する既定値を変えたい場合は変数 mime-file-types を設定して下さい。

 -- Variable: mime-file-types

     挿入される file の file 名に対する tag の既定値を与える。

     この変数は

          	(FILE_PAT TYPE SUBTYPE PARAMS ENCODING
          	 DISPOSITION_TYPE DISPOSITION_PARAMS)

     という list の list で、各要素は以下の通りである：

     FILE_PAT
          file 名を表す正規表現

     TYPE
          media type

     SUBTYPE
          media subtype

     PARAMS
          Content-Type field の parameter

     ENCODING
          Content-Transfer-Encoding

     DISPOSITION_TYPE
          disposition-type

     DISPOSITION_PARAMS
          Content-Disposition field の parameter

     設定例： *.rtf に対する media type を application/rtf にする場合

          (call-after-loaded
           'tm-edit
           (lambda ()
             (set-alist 'mime-file-types
          	      "\\.rtf$"
          	      '("application" "rtf" nil nil
          		"attachment" (("filename" . file)))
          	      )))

transfer level
**************

message に挿入する data は 7bit ((tm-ja)7bit) ないし 8bit ((tm-ja)8bit) もしくは binary ((tm-ja)binary) で表現することができます。

よって、7bit しか通さない MTA ((tm-ja)MTA) を経由する場合、7bit の data はそのままで送れますが、8bit や binary の data は 7bit に変換しなければなりません。

同様に、8bit しか通さない MTA を経由する場合、7bit や 8bit の data はそのままで送れますが、binary の data は 7bit か 8bit に変換しなければなりません。

[Memo]

     EBCDIC しか通さない MTA を経由する場合、7bit の data も base64 等で変換しないと送れませんが、私は EBCDIC のことまでは知りません。(^_^;

     同様に、制御文字を通さない MTA のことや code 変換を行なう MTA も消えてなくなって欲しいです。(^_^;

     binary も通す MTA も存在するんでしょうが、今のところあまり一般的とはいえないでしょう。

transfer level というのはどの範囲の data まで送れるかということを表すものです。tm-edit は mime-editor/transfer-level という変数を持っており、これで transfer level を表現します。

 -- Variable: mime-editor/transfer-level

     transfer level を表す。

     ある data の transfer level がこの値を越える場合、7bit data への変換が行われる。

     現在のところ、7 か 8 が有効である。既定値は 7 である。

     EBCDIC を 5, ASCII printable のみを 6, binary を 9 とすることを計画しているが、実装の予定はない。

[Memo]

     transfer level は message header (header) には関係しない。RFC 1521 は body において、8bit の data を使えるように RFC 822 ((tm-ja)RFC 822) を拡張しているが、message header では us-ascii ((tm-ja)us-ascii) のみを用いることを求めている。

header での非 ASCII 文字の使用
**********************

RFC 1522 ((tm-ja)RFC 1522) では header で非 ASCII 文字を表現するための方法を定義しています。

これは encoded-word ((tm-ja)encoded-word) と呼ばれる型式で、MIME charset ((tm-ja)MIME charset) を宣言し、かつ、7bit ((tm-ja)7bit) で表現することを可能にしています。

どうしても encoded-word を使いたくない場合
============================

ところで、header で encoded-word を用いずに生で非 ASCII 文字列を入れるのは間違っています。なぜなら、Internet ではさまざまな符号化文字集合 ((tm-ja)Coded character set)が使われており、MIME charset ((tm-ja)MIME charset) を明示的に宣言しなければそれらを正確に区別することはできないからです。

例えば、MIME charset を宣言しなければ iso-8859-1 ((tm-ja)iso-8859-1) と iso-8859-2 ((tm-ja)iso-8859-2) は見分けが付かないでしょう。

しかしながら、どうしても encoded-word を使いたくない場合には以下の変数を設定してください。

 -- Variable: mime/field-encoding-method-alist

     field 名と符号化法を表す symbol の対からなる連想 list.

     field 名は文字列、もしくは、任意の文字列を表す t である。

     符号化法は、nil ならば無変換、mime ならばencoded-word, MIME charset を表す symbol ならばその符号化文字集合へencoded-word を用いずに変換することを表す。

     field 名は文字列から検索され、指定した文字列が見付からなければt を用いる。

     既定値は

          (("X-Nsubject" . iso-2022-jp-2)
           ("Newsgroups" . nil)
           (t            . mime)
           ))

     である。即ち、X-Nsubject field は生の iso-2022-jp-2 ((tm-ja)iso-2022-jp-2), Newsgroup は無変換、それ以外の field は encoded-word に変換される。

また、field 毎ではなく、符号化文字集合毎に指定したい場合は、変数 mime-eword/charset-encoding-alist を用いてください。 (API about header)

header に関する関数・変数
================

Command mime/encode-message-header &optional  code-conversion

Current buffer の message header に存在する非 ASCII 文字をnetwork 表現に変換します。

optional 引数の CODE-CONVERSION に非-nil が指定された場合、 encoded-word にしない field をmime/field-encoding-method-alist に従って、code 変換します。

 -- Function: mime/encode-field string

     STRING を field として encoded-word に変換します。

     長い行は RFC 822 に従って折返されます。

 -- Function: mime-eword/encode-string string &optional column mode

     STRING を encoded-word に変換します。

     長い行は RFC 822 に従って折返されます。

     COLUMN はこの文字列が何桁目から始まっているかを指定します。既定値は 0 です。

     MODE はこの文字列がどういう部分で使われているかを示します。指定できる値としては text, comment, phrase があります。既定値は phrase です。

 -- Variable: mime-eword/charset-encoding-alist

     MIME charset を表す symbol と nil, もしくは、"B" か"Q" の文字列の対からなる連想 list.

     nil はその MIME charset を encoded-word にしないことを表し、 "B" はその MIME charset を B 方式の encoded-word にすることを表し、 "Q" はその MIME charset を Q 方式の encoded-word にすることを表す。

PGP
***

tm-edit では PGP/MIME ((tm-ja)PGP/MIME) (RFC 2015) および PGP-kazu ((tm-ja)PGP-kazu) (draft-kazu-pgp-mime-00.txt) による暗号化・電子署名・公開鍵の挿入機能を利用することができます。

但し、この機能を利用するには Mailcrypt package ((mailcrypt)) と pgp command が必要です。

また、変数 mimed-editor/signing-type と変数 mime-editor/encrypting-type に pgp-elkins か pgp-kazu を代入してください。

pgp-elkins を指定した場合 PGP/MIME が使われ、 pgp-kazu を指定した場合 PGP-kazu が使われます。

 -- Variable: mimed-editor/signing-type

     PGP での電子書名の形式を指定します。

     pgp-elkins か pgp-kazu を指定してください。

     既定値は nil です。

 -- Variable: mime-editor/encrypting-type

     PGP での暗号化の形式を指定します。

     pgp-elkins か pgp-kazu を指定してください。

     既定値は nil です。

謝辞
**

最初に、tm-edit の前身となった mime.el を書き、その配布と改造をお許し下さった、梅田政信さんに感謝します。tm-edit の user interface の基本的な設計は梅田さんの手によるもので、とても良い設計であったと思います。

次に、beta test に協力して下さった日本語版、英語版双方の tm mailing list の member に感謝します。