FLIM-LB 1.14 MIME 機能説明書

This file documents MIME features of FLIM-LB, a fundamental library to process Internet Messages for GNU Emacsen.

GNU Emacsen 用の Internet Message 処理のための基礎 library である FLIM-LB の MIME 機能に関して説明します。


1 FLIM-LB って何?

FLIM は Internet Message の表現や符号化に関する基礎的な機能を提供する ための library です。 FLIM-LB は FLIM のバリアントの一つで、 最新バージョンの Emacs への対応などを特徴とします。


2 FLIM の MIME 機能の使い方

FLIM の提供する MIME 機能を使うためには

(require 'mime)

を評価してください。


3 Message と Entity

RFC 2045 (RFC 2045) によれば、「Entity という語は、message, もしく は、multipart entity の body 中の1つの部分の、MIME で定義された header field と内容を指す」となっています。ここでは、MIME で定義された header field 以外の全ての header と body を指す語として entityを用いる ことにします。

RFC 2045 の定義は、MIME message が entity を節とする木構造であることを示 しています。つまり、MIME は message を木構造に拡張した訳です。

FLIM は entity の情報を表現するためにmime-entity 構 造体を用います。以下では単に mime-entity と呼ぶことにします。


3.1 Entity の生成

Function: mime-open-entity type location

Entity を開いて、それを返します。

type は representation-type です。(cf. Entity の表現と実現)

location は entity の位置です。指定方法は representation-type に依って変わります。

Function: mime-parse-buffer &optional buffer type

buffer を message として構文解析し、その結果の mime-entity を buffermime-message-structure に格納する。

buffer が省略された場合、現在の buffer を構文解析する。

type が指定された場合、その値を生成される mime-entity の表象型とし て用いる。省略された場合は buffer となる。(cf. Entity の表現と実現)


3.2 Entity 階層

MIME message は entity を単位とする木構造になっています。

この木において根となる節は message 全体を表す entity です。ここでは、こ れを root-entity もしくはmessage と呼びます。

root-entity 以外の entity は親を持ちます。また、entity は子供を持つかも 知れません。この親子関係を考えることで entity の相対関係を扱うことができ ます。

一方、entity の message における位置を考えることもできます。

entity はこの木における節となりますが、この木には深さと同じ深さの中の 順番に従って番号が付けることができます。即ち、


                              ┌───┐
                              │  nil │
                              └─┬─┘
              ┌─────────┼─────────┐
            ┌┴┐              ┌┴┐              ┌┴┐
            │0│              │1│              │2│
            └┬┘              └┬┘              └┬┘
              │        ┌────┼────┐        │
          ┌─┴─┐┌─┴─┐┌─┴─┐┌─┴─┐┌─┴─┐
          │ 0.0││ 1.0││ 1.1││ 1.2││ 2.0│
          └───┘└───┘└───┘└───┘└───┘

のように深さ n の節には長さ n の整数列の節番号が振れます。これ を entity-number と呼びます。entity-number は S 式と しては (1 2 3) のような整数のリストとして表現されます。

mime-entity では、これと同様の node-id を用います。node-id はちょ うど entity-number を逆にしたリストで、entity-number 1.2.3 に対応する node-id は (3 2 1) です。

前述のように、MIME message は entity を単位とした木構造になっているので、 この根である message 全体も mime-entity で表現することができ、buffer local 変数 mime-message-structure に格納することにします。

mime-message-structure を起点に entity-number や node-id で示される entity を取り出すことができます。

Variable: mime-message-structure

現在の buffer における message 全体の mime-entity 構造体を格納するbuffer local 変数。

Function: mime-entity-children entity

entity に含まれる entity の list を返す。

Function: mime-entity-parent entity &optional message

entity の親の entity を返す。

message が指定された場合、これを根と見倣す。

Function: mime-root-entity-p entity

entity が根(即ち、message 全体)である場合に、非-nil を返 す。

Function: mime-entity-node-id entity

entity の node-id を返す。

Function: mime-entity-number entity

entity の entity-number を返す。


3.4 Entity の属性

Function: mime-entity-content-type entity

entity の content-type を返す。(cf. mime-content-type 構造体)

Function: mime-entity-content-disposition entity

entity の content-disposition を返す。 (cf. mime-content-disposition 構造体)

Function: mime-entity-filename entity

entity の file 名を返す。

Function: mime-entity-encoding entity &optional default-encoding

entity の content-transfer-encoding を返す。 (cf. 符号化法)

もし、entity に Content-Transfer-Encoding 欄が存在しない場合は、 default-encoding を返す。これが指定されない場合は、"7bit" を用いる。

Function: mime-entity-cooked-p entity

entity の内容が既にコード変換されている場合は nil で無い値 を返す。


3.5 Entity header の情報

Function: mime-fetch-field field-name &optional entity

entity の header 中の field-name 欄の body を返す。

結果の文字列は network 表現のままである。

entity が省略された場合は、mime-message-structure の値を用 いる。

field-name 欄が存在しない場合は nil を返す。

Function: mime-read-field field-name &optional entity

entity の header 中の field-name 欄を構文解析した結果を返す。

結果の形式は欄毎に異なる。非構造化欄の場合は文字列を返し、構造化欄の場合 はその形式に従った list を返す。

結果中の文字列は Emacs の内部表現に変換される。

entity が省略された場合は、mime-message-structure の値を用 いる。

field-name 欄が存在しない場合は nil を返す。


3.6 Entity の文字表現

Function: mime-insert-header entity &optional invisible-fields visible-fields

現在位置に entity の復号した header を挿入する。

invisible-fieldsvisible-fields は正規表現のlist で、それ ぞれ、表示したくない field 名と表示したい欄名を表現したものである。

invisible-fields の要素のどれかに match し、かつ、 visible-fields の要素のどれにも match しない欄は表示されない。

encoded-word (Header の network 表現) は復号される。『生の非 us-ascii 文字』 は default-mime-charset として解釈される。

Function: mime-insert-text-content entity

point の前に entity を text entity として挿入します。

entity の内容は MIME charset として復号化され ます。entity の Content-Type field に charset paramter が無 いと、default-mime-charset が初期値として使われます。

Variable: default-mime-charset

適切な MIME charset (MIME charset) が見つからなかった場合に用いら れるMIME charset.

本来は APEL の変数である。


3.7 Entity の内容

Function: mime-entity-content entity

entity の内容の byte 列を返す。

Function: mime-insert-entity-content entity

point の位置に entity の内容を挿入します。

Function: mime-write-entity-content entity filename

entity の内容を filename に書き込みます。


3.8 Entity のネットワーク表現

Function: mime-insert-entity entity

entity の header と body を point のところに挿入します。

Function: mime-write-entity entity filename

entity の表現を filename に書き込みます。

Function: mime-write-entity-body entity filename

entity の body を filename に書き込みます。


3.9 Entity の buffer による表現

Function: mime-entity-buffer entity

entity が存在する buffer を返す。

Function: mime-entity-point-min entity

entity が存在する buffer における、entity が占める領域の先頭 位置を返す。

Function: mime-entity-point-max entity

entity が存在する buffer における、entity が占める領域の末尾 位置を返す。

Function: mime-entity-header-start entity

entity が存在する buffer における、header が占める領域の先頭位置を 返す。

Function: mime-entity-header-end entity

entity が存在する buffer における、header が占める領域の末尾位置を 返す。

Function: mime-entity-body-start entity

entity が存在する buffer における、body が占める領域の先頭位置を返 す。

Function: mime-entity-body-end entity

entity が存在する buffer における、body が占める領域の末尾位置を返 す。


3.10 Entity の表現と実現

Entity は抽象化されたデータ表現で、実際のデータ表現としては用途に応じて さまざまなものが利用できるように設計されています。

ここで、entity がどういう種類の表現を行っているかを示すのが representation-type で、entity を生成する時にはこれを指定します。 (cf. Entity の生成)

前節までに述べて来た entity に対する処理は、entity に対してその処理を依 頼することによって実現されています。Entity は自分の representation-type を知っており、その representation-type に応じて実際の処理を行う関数を呼 び出します。このような関数を entity 処理method と呼びます。また、 representation-type 毎にこのような関数をまとめたものを mm-backend と呼びます。

mm-backend は representation-type の名前の先頭に mm という 接頭辞を付けた関数名からなる module で、その module 名は同様に representation-type の名前の先頭に mm を付けたものになって います。この module は representation-type の entity が最初に生成される 時に自動的に require されます。


3.10.1 Entity への便り

Function: mime-entity-send entity message &rest args

entitymessage を送る。

argsmessage の引数である。


3.10.2 mm-backend の作り方

Macro: mm-define-backend type &optional parents

type を mm-backend として定義します。

PARENTS が指定されている場合は、type は prents を継承します。それぞれの parent は representation-type である必要があ ります。

例:

(mm-define-backend chao (generic))
Macro: mm-define-method name args &rest body

name を (nth 1 (car args)) backend の method 関 数として定義します。

args は lambda の引数リストのようなものですが、(car args) は指定された parameter である必要があります。(car (car args)) は変数の名前で、(nth 1 (car args)) は backend の名前 (representation-type) です。

例:

(mm-define-method entity-cooked-p ((entity chao)) nil)

4 Content-Type 欄の情報

Content-Type 欄 は media-type (media-type) や MIME charset といった entity (Message と Entity) の内容の種類や表現形式などを記述 するためのもので、RFC 2045 (RFC 2045) で定義されています。

[Memo]

歴史的には RFC 1049 で Content-Type 欄が提案されている。但し、MIME の media-type のような type と subtype の区別はなく、MIME charset のような 文字符号の種類を表現することもできない。

FLIM は Content-Type 欄を構文解析する関数と Content-Type 欄の解析結果を 格納する構造体 mime-content-type を提供します。


4.1 Content-Type 欄の形式

Content-Type 欄の形式は以下のように定義されています:

“Content-Type” “:” type “/” subtype *( “;” parameter )

例えば、

Content-Type: image/jpeg

Content-Type: text/plain; charset=iso-2022-jp

などのように用いられます。

ここで、‘type’ と ‘subtype’ は entity の形式を示すもので、両者を総称し て、‘media-type’ と呼ぶことにします。上記の例における ‘image/jpeg’ や ‘text/plain’ は media-type の1つです。

[Memo]

Content-Type 欄のない entity は

Content-Type: text/plain; charset=us-ascii

として解釈される。(cf. us-ascii)


4.2 mime-content-type 構造体

Structure: mime-content-type

Content-Type 欄の情報を格納するための構造体。

この構造体を参照するには mime-content-type-要素名 という名前の参 照関数を用いる。

この構造体の要素は以下の通りである:

primary-type

media-type の主型 (symbol).

subtype

media-type の副型 (symbol).

parameters

Content-Type 欄の parameter (連想 list).

Function: make-mime-content-type type subtype

&optional parameters

content-type の生成子。

Function: mime-content-type-parameter content-type parameter

content-typeparameter の値を返す。


4.3 Content-Type 欄の解析器

Function: mime-parse-Content-Type string

string を content-type として解析した結果を返す。

Function: mime-read-Content-Type

現在の buffer の Content-Type 欄を読み取り、解析した結果を返す。

Content-Type 欄が存在しない場合は nil を返す。


4.4 Content-Type に関する有用な関数

Function: mime-type/subtype-string type &optional subtype

typesubtype から type/subtype 形式の文字列を返す。


5 Content-Disposition 欄の情報

Content-Disposition 欄 は entity の表示や file 名など の属性になどに関する情報を記述するためのものです。

[RFC 2183]

S. Dorner, K. Moore and R. Troost, “Communicating Presentation Information in Internet Messages: The Content-Disposition Header”, August 1997, Standards Track.

FLIM は Content-Disposition 欄を構文解析する関数と Content-Disposition 欄の解析結果を格納する構造体 mime-content-disposition を提供します。


5.1 mime-content-disposition 構造体

Structure: mime-content-disposition

Content-Disposition 欄の解析結果を収めるための構造体。

この構造体を参照するには mime-content-disposition-要素名 という名 前の参照関数を用いる。

この構造体の要素は以下の通りである:

disposition-type

disposition-type (symbol).

parameters

Content-Disposition 欄の parameter (連想 list).

Function: mime-content-disposition-parameter content-disposition parameter

content-dispositionparameter の値を返す。

Function: mime-content-disposition-filename content-disposition

content-disposition の filename の値を返す。


5.2 Content-Disposition 欄の解析器

Function: mime-parse-Content-Disposition string

string を content-disposition として解析した結果を返す。

Function: mime-read-Content-Disposition

現在の buffer の Content-Disposition 欄を読み取り、解析した結果を返す。

Content-Disposition 欄が存在しない場合は nil を返す。


6 符号化法

Content-Transfer-Encoding 欄 は entity の符号化法を記述するため のものです。

FLIM では Content-Transfer-Encoding 欄を構文解析する関数を提供します。こ れらの関数は Content-Transfer-Encoding 欄の情報は文字列で表現します。

また、Content-Transfer-Encoding に基づいて符号化・復号化を行う関数も提 供されます。


6.1 Content-Transfer-Encoding 欄の解析器

Function: mime-parse-Content-Transfer-Encoding string

string を content-transfer-encoding として解析した結果を返す。

Function: mime-read-Content-Transfer-Encoding &optional default-encoding

現在の buffer の Content-Transfer-Encoding 欄を読み取り、解析した結果を 返す。

Content-Transfer-Encoding 欄が存在しない場合はdefault-encoding を 返す。


6.2 符号化・復号化

Function: mime-encode-region start end encoding

現在の buffer の start から end までの region を encoding を使って符号化します。

Function: mime-decode-region start end encoding

現在の buffer の start から end までの region を encoding を使って復号化します。

Function: mime-decode-string string encoding

stringencoding として復号した結果を返す。

Function: mime-insert-encoded-file filename encoding

ENCODING format で符号化された file FILENAME を 挿入する。

Function: mime-write-decoded-region start end filename encoding

encoding で符号化された現在の region を復号化して filenameに書き込みます。

<var>start<var> と end は buffer の位置です。


6.3 Other utilities

Function: mime-encoding-list &optional SERVICE

Content-Transfer-Encoding の list を返します。

service が指定されていると、それに対する Content-Transfer-Encoding を返します。

Function: mime-encoding-alist &optional SERVICE

補完のための Content-Transfer-Encoding の表を返します。

service が指定されている場合はそれに対する Content-Transfer-Encoding の list を返します。


6.4 How to write encoder/decoder module

Macro: mel-define-method name args &rest body

name を (nth 1 (car (last args))) backend の method 関数として定義します。

args は lambda の引数 list と似ていますが、(car (last args)) は指定された parameter である必要があります。(car (car (last args))) は変数の名前で、(nth 1 (car (last args))) は backend の名前 (encoding) です。

例:

(mel-define-method mime-write-decoded-region (start end filename
						    (nil "base64"))
  "Decode and write current region encoded by base64 into FILENAME.
START and END are buffer positions."
  (interactive
   (list (region-beginning) (region-end)
	 (read-file-name "Write decoded region to file: ")))
  (let ((str (buffer-substring start end)))
    (with-temp-buffer
      (insert (decode-base64-string str))
      (write-region-as-binary (point-min) (point-max) filename)
      )))
Macro: mel-define-method-function spec function

spec の関数定義を function に設定します。

spec の最初の要素は service です。

args の残りは lambda の引数 list 似ていますが、(car (last args)) は指定された parameter である必要があります。(car (car (last args))) は変数の名前で、(nth 1 (car (last args))) は backend の名前 (encoding) です。

例:

(mel-define-method-function (mime-encode-string string (nil "base64"))
			    'encode-base64-string)

6.5 符号化/復号化 service を追加する方法

Macro: mel-define-service name &optional args doc-string

name を Content-Transfer-Encoding の service として定義しま す。

args が指定されていると、name は service の generic function として定義されます。

例:

(mel-define-service encoded-text-encode-string (string encoding)
  "Encode STRING as encoded-text using ENCODING.
ENCODING must be string.")

7 Header の network 表現

encoded-word は header で非 ASCII (ASCII) 文字を表現するための形式 で、RFC 2047 で定義されています。

[RFC 2047]

K. Moore, “MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header Extensions for Non-ASCII Text”, November 1996, Standards Track (obsolete RFC 1521,1522,1590).

また、行儀の悪いことだと言えますが、encoded-word を用いずに非 ASCII (ASCII) 文字を header に入れた記事も存在します。

FLIM はこれらを符号化・復号化する機能を提供します。


7.1 Header の符号化・復号化

Function: eword-decode-header &optional code-conversion separator

Header 中の encoded-word を復号する。

もし code-conversionnil なら、encoded-word だけが復号さ れる。もし、code-conversion が MIME charset (MIME charset) なら、非 ASCII bit patterns はその MIME charset として復号される。これ以 外の場合、非 ASCII bit patterns はdefault-mime-charset. として復 号される。(cf. Entity の文字表現)

もし separatornil でなければ、その値がheader separator として用いられる。

Function: eword-encode-header &optional code-conversion

Header を network 表現に符号化する。

各 field は mime-field-encoding-method-alist で指定された方式で 符号化される。

Variable: mime-field-encoding-method-alist

Field を符号化する方法を指定する連想 list。各 element は (FIELD . METHOD) の様になっている。

METHOD が mime であれば、FIELD は MIME format に符号化さ れる (encoded-word)。

METHOD が nil であれば、FIELD は符号化されない。

METHOD が MIME charset であれば、FIELD はネットワークコードに変換しな ければならないときに charset に符号化される。

そうでなければ、FIELD はネットワークコードに変換しなければならないとき に 変数 default-mime-charset で符号化される


8 一般設定

group: mime

MIME 関連機能に関する group.

mailnews に属する。


9 付録


9.1 用語


9.1.1 7bit

ここでは 0 から 127 の整数を指す。

0 から 127 の整数の列で表現できるような data を “7bit の data” と呼ぶ。

また、0 から 31 および 127 で表現される制御文字と 32 で表現される空白と 33 から 126 で表現される図形文字からなる文字列のことを “7bit の文字列” と呼ぶ(これは ISO 2022 の「7 単位系」と同様)。

伝統的な Internet の MTA (MTA) は 7bit の data を転送できるので、 7bit の data は Quoted-Printable (Quoted-Printable) や Base64 (Base64) といった変換を行わなくてもそのまま転送できる。

しかし、7bit であればどんな data でも良いとはいえない。なぜなら、1行の 長さがあまりに長いと、MTA はその message を転送することができないからで ある。ちなみに、RFC 822 (RFC 822) は1行は改行文字を除いて 998 byte 以内であることを求めている。よって、これ以上の行が含まれる可能性の ある data, 例えば、Postscript の data などは Quoted-Printable 等で encodeする必用がある。


9.1.2 8bit

ここでは 0 から 255 の整数を指す。

0 から 255 の整数の列で表現できるような data を “8bit の data” と呼ぶ。

また、0 から 31, 127 および 128 から 159 で表現される制御文字と 32 で表 現される空白と 33 から 126 と 160 から 255 で表現される図形文字からなる 文字列のことを “8bit の文字列” と呼ぶ(これは ISO 2022 の「8 単位系」と同様)。

iso-8859-1 や euc-kr といった符号化文 字集合は 8bit の文字列である。

伝統的な Internet の MTA (MTA) は 7bit (7bit) の data しか転 送できないので、そうした MTA を経由する場合、Quoted-Printable (Quoted-Printable) や Base64 (Base64) といった変換を行わなく てはならない。

しかし、最近では 8bit の文字列をそのまま通すことができる MTA も登場して きたので、そのまま送ることができる場合も増えてきた。

しかし、8bit であればどんな data でも良いとはいえない。なぜなら、1行の 長さがあまりに長いと、MTA はその message を転送することができないからで ある。ちなみに、RFC 822 (RFC 822) は1行は改行文字を除いて 998 byte 以内であることを求めている。よって、これ以上の行が含まれる可能性の ある data, 例えば、Postscript の data などは Quoted-Printable 等で encodeする必用がある。

また、こうした理由から、1行が 999 byte 以上の行が存在する可能性のある data は binary (binary) と呼ぶことにする。

ちなみに、7bit で表現できる data は 8bit でも表現できる。よって、 “8bit” と言った場合、1行が 998 byte 以下の任意の data を指すことが ある。


9.1.3 ASCII

アメリカ連邦で使われる文字を符号化した符号化文字集合 (Coded character set(符号化文字集合), Character code(文字符号))。A-Z, a-z の Latin 文字と数字、幾つかの記号からなる。ISO 646 の一つ で、現在は国際基準版 (IRV) になっている。

[ASCII]

“Coded Character Set – 7-Bit American Standard Code for Information Interchange”, ANSI X3.4:1986.


9.1.4 Base64

RFC 2045 (RFC 2045) で定義されている MIME (MIME) における binary data (binary) の network での変換法の1つ。

『64 進数』という意味で、3 byte の data を 0 から 63 の数を表す ASCII (ASCII) 4 文字に変換する方法。(もし、4 文字にならなければ pad と呼ばれる詰め物をして長さを調整する)

この 65 種類の文字は ASCII と EBCDIC の共通部分から選ばれており、 Internet 以外の network を経由する場合でも安全に転送できるように設計さ れている。


9.1.5 binary

任意の byte 列を binary と呼ぶ。

8bit (8bit) と異なるのは data に行の構造を仮定しないことである。

また、行の構造があっても、999 byte 以上からなる行がある場合も binary と 呼ぶことにする。

ちなみに、7bit (7bit) や 8bit で表現できる data は binary でも表現 できる。よって、binary data と言った場合、任意の data を指すこ とがある。


9.1.6 Coded character set(符号化文字集合), Character code(文字符号)

文字と byte 列と1対1に対応付ける曖昧でない規則の集合。


9.1.7 media-type

MIME (MIME) における entity (Message と Entity) の種類。 primary-typesubtype からなる。RFC 2046 (RFC 2046) で定義されている。

primary-type は標準では

  • text
  • image
  • audio
  • video
  • application
  • multipart
  • message

が定義され、それぞれには application/octet-stream, audio/basic, image/jpeg, multipart/mixed, text/plain, video/mpeg などの さまざまな subtype が定義されている。

[注意]

ここでは、text/plain などの type/subtype の組をしばしば primary-type/subtype と書く。

media-type は、RFC 2046 で定義されているものに加えて、登録することもでき る。現在、登録されているものは MEDIA TYPES (ftp://ftp.isi.edu/in-notes/iana/assignments/media-types) で参照できる。

また、type もしくは subtype に、前に ‘x-’ を付けた x-token を用 いることにより、登録されていないものを私的に用いることもできる。しかし、 当然のことながら、こうした私的な media-type は諒解を得た者の間でしか解釈 できないので利用には注意すること。

(cf. Content-Type 欄の情報)


9.1.8 message

ここでは mail と news 記事の総称として用いる。


9.1.9 MIME

Multipurpose Internet Mail Extensions の略で、Internet の mail や news で us-ascii plain text (us-ascii) 以外の文字を使うための RFC 822 (RFC 822) に対する拡張。

RFC 2045 は冒頭で次のように述べている:

STD 11, RFC 822 は、US-ASCII message header に関して非常に詳細に規定し た message 表現 protocol を定義している。しかし、それは単に flat な US-ASCII text のみに留まり、message の内容や message body に関する規定 はなされていない。Multipurpose Internet Mail Extensions, あるいは MIME と総称される、この一連の文書は、以下の事を可能とするために message の 形式を再定義した:

  1. 文書 message body における US-ASCII 以外の文字集合
  2. 非文書 message body
  3. 複数の部分からなる message body
  4. US-ASCII 以外の文字集合からなる文書 header 情報

RFC 2045 (RFC 2045), RFC 2046 (RFC 2046), RFC 2047 (Header の network 表現), RFC 2048 (RFC 2048), RFC 2049 (RFC 2049) で定義されている。


9.1.10 MIME charset

Content-Type (Content-Type 欄の情報) 欄や encoded-word (Header の network 表現) の charset parameter で用いられる登録された符号化文字集合(Coded character set(符号化文字集合), Character code(文字符号))。

RFC 2045 (RFC 2045) で定義されている。

iso-2022-jp や euc-kr はその1つ。


9.1.11 MTA

Message Transfer Agent の略で、qmail や sendmail などの mail 配 送 program と inn などの news server の総称。

(cf. MUA)


9.1.12 MUA

Message User Agent の略で、mail reader と news reader の総称。

(cf. MTA)


9.1.13 Quoted-Printable

RFC 2045 (RFC 2045) で定義されている MIME (MIME) における binary data の network での変換法の1つ。

‘=’ や制御文字や 128 以上の文字などは ‘=AF’ のように ‘=’ の後に続く 16 進数で表現する。このため、ASCII (ASCII) 文字中心の data では Base64 (Base64) に比べると可読性が高くなる可能性がある。

しかしながら、EBCDIC には存在しない文字を利用する場合、EBCDIC を利用し ている network では安全に転送することができず、Base64 に比べて安全性は 低い。


9.1.14 RFC 822

Internet mail の主に message header に関する形式に 関する標準を定めている RFC.

[Memo]

news message もこれに準じているので、Internet mail と書くよりも、 Internet message と書いた方が良いかもしれない。

[RFC 822]

D. Crocker, “Standard for the Format of ARPA Internet Text Messages”, August 1982, STD 11.


9.1.15 RFC 1036

USENET での message の形式を定めた RFC. RFC 822 (RFC 822) の subset になっている。Internet の標準ではないが、USENET 以外の netnews で もこれに準じているものが多い。

[USENET: RFC 1036]

M. Horton and R. Adams, “Standard for Interchange of USENET Messages”, December 1987, (obsolete RFC 850).


9.1.16 RFC 2045

[RFC 2045]

N. Freed and N. Borenstein, “Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies”, November 1996, Standards Track (obsolete RFC 1521, 1522, 1590).


9.1.17 RFC 2046

[RFC 2046]

N. Freed and N. Borenstein, “Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types”, November 1996, Standards Track (obsolete RFC 1521, 1522, 1590).


9.1.18 RFC 2048

[RFC 2048]

N. Freed, J. Klensin and J. Postel, “Multipurpose Internet Mail Extensions (MIME) Part Four: Registration Procedures”, November 1996, Standards Track (obsolete RFC 1521, 1522, 1590).


9.1.19 RFC 2049

[RFC 2049]

N. Freed and N. Borenstein, “Multipurpose Internet Mail Extensions (MIME) Part Five: Conformance Criteria and Examples”, November 1996, Standards Track (obsolete RFC 1521, 1522, 1590).


9.1.20 plain text

書体や組版に関する情報を持たない文字符号 (Coded character set(符号化文字集合), Character code(文字符号)) のみ で表現される text 情報。


9.1.21 us-ascii

アメリカ連邦などで使われる英語などを表現するための MIME charset (MIME charset) の1つ。

ASCII (ASCII) のみからなり ISO 2022 による符号拡張は許されない。

Internet message における標準の符号化文字集合 (Coded character set(符号化文字集合), Character code(文字符号)) であり、明示的に MIME charset が示されない場合は原則として us-ascii が使われる。

また、RFC 822 (RFC 822) における ASCII は us-ascii である。


9.2 bug 報告の仕方

FLIM-LB に関する議論は以下のメーリングリストで行われます。 最新バージョンのアナウンスもこちらに流れます。

Wanderlust Mailing List <wl@ml.gentei.org>

ここでは主に日本語での議論が行われています。また、英語専用のリストとして

Wanderlust List in English <wl-en@ml.gentei.org>

もあります(こちらに投稿されたメッセージは前者にも配送されます)。

これらのメーリングリストのガイドを得るには、wl-ctl@ml.gentei.org 宛 (英語の方は wl-en-ctl@ml.gentei.org 宛) で、本文に

# guide

と書いたメールを送って下さい。

バグ報告やパッチの送付もこれらのメーリングリストへ送ってください。メーリ ングリストへの送信はメンバになる必要があります。

但し、あまりにも古い版に関する報告は歓迎されません。古い版の bug は、新 しい版では治っているかもしれません。まず、最新版で確認してみましょう。

それから、適切な報告をしましょう。単に「うまく動かない」と言われてもど ういう状況なのかはさっぱり判りません。最低限、OS, emacs, APEL, FLIM, SEMI, 使っている MUA の種類および版、設定を書く必要があります。また、 error が起っている場合は backtrace を送ることも重要です。 (cf. Reporting Bugs in GNU Emacs Manual)

また、bug は大抵複数の人が遭遇するものです(そうでなければ、bug ではな い可能性があります)。だから、作者に直接 mail を送ると作者は同じ mail を何通も書く羽目になります。だから、必ず bug 報告は上記の address に送っ てください。


9.3 GitHub による開発

FLIM-LB のリポジトリは GitHub で公開されています。

プルリクエストを送る場合は、Emacs の様に、コミットメッセージに従来の ChangeLog エントリに相当する内容をインデントせずに入力して下さい。 Emacs の CONTRIBUTE ファイル 1 にある Commit messages セクションを参照して下さい。

また、バグ報告の場合はバックトレースを取って添付すると原因究明しやすくな ります。 2


9.4 歴史

FLIM の code の最古の部分は 榎並 嗣智 氏が書いた mime.el に起源し ます。この小さな program は Nemacs で動作する iso-2022-jp の B-encoding 専用の encoded-word の復号化プログラムでした。

その後、守岡 知彦 は mime.el を元にtiny-mime.el というプロ グラムを書きます。これは、Nemacs と Mule で動作する encoded-word の符号 化・復号化プログラムでした。tiny-mime.el は B-encoding だけでなく Q-encoding もsupport し、また、MULE で扱うことができるさまざまな MIME charset (MIME charset) を同時に使うことができました。この時、 Nemacs と Mule の双方を support するために用いられたテクニックは後に emu package にまとめられます。

この頃、守岡 知彦 は tiny-mime.el をさまざまな MUA で使うための設 定集も配布していましたが、それらは後にtiny-mime.el とともに1つの package にまとめられ、tm という名前で配布されます。

守岡 知彦 はやがて、MIME message を閲覧するためのプログラムである tm-body.el を書きます。これは、すぐにtm-view.el という名前 に変わりましたが、やがて、これがtiny-mime.el に代わって、tm の中 核となります。

tm-view.el は当然、Content-Transfer-Encoding を扱う必要があります。 この目的のために、MEL が整備されはじめました。Base64 に関しては tiny-mime.el の code が移され、また、新たにQuoted-Printable の code が追加されました。これらがmel-b.elmel-q.el になり ました。

また、後に、守岡 知彦 によって uuencode 用の mel-u.el が追加され、 その後に、小林 修平 氏によって x-gzip64 用のmel-g.el が追加されま した。

tm では後に、守岡 知彦 によって tiny-mime.el の再実装が行われ、こ の過程で、STD 11 の parser が書かれました。これは、現在の std11.el に当たります。また、この過程で tiny-mime.el は復 号化を行う tm-ew-d.el と符号化を行う tm-ew-e.el に分けられ ました。この両者が現在の eword-decode.eleword-encode.el の先祖に当たります。

後に、守岡 知彦 らによって tm の全面書き換え作業が行われ、この過程で、tm は APEL, MEL, SEMI, EMH, RMAIL-MIME, Gnus-MIME などに分けられました。こ のうちの MEL が FLIM の直接の先祖に当たります。

後に、APEL から std11.el が移され、また、mailcap.el, eword-decode.el および eword-encode.el が SEMI から移され、 package の名前が FLIM となります。

この直前から田中 哲 氏がより RFC に忠実な実装を書き始め、これは、現在、 FLIM の枝である “FLIM-FLAM” となっています。


10 概念索引

Jump to:   A   B   C   E   I   M   N   P   R   S   T   U   V   X  
Index EntrySection

A
ANSI X3.4:1986ASCII
applicationmedia-type
ASCIIASCII
ASCIIus-ascii
audiomedia-type

B
binary8bit
binarybinary
binary databinary

C
Content-Disposition 欄Content-Disposition
Content-Transfer-Encoding 欄Content-Transfer-Encoding
Content-Type 欄Content-Type

E
entityEntity
entity 処理 methodmm-backend
entity-numberEntity hierarchy

I
imagemedia-type
Internet mailRFC 822
Internet messageRFC 822

M
messageEntity hierarchy
messagemedia-type
message headerRFC 822
Message Transfer AgentMTA
Message User AgentMUA
mime-content-dispositionContent-Disposition
mime-content-typeContent-Type
mime-entityEntity
mm-backendmm-backend
multipartmedia-type
Multipurpose Internet Mail ExtensionsMIME

N
node-idEntity hierarchy

P
padBase64
parameterContent-Type field
primary-typemedia-type
primary-type/subtypemedia-type

R
representation-typemm-backend
RFC 1036RFC 1036
RFC 2045RFC 2045
RFC 2046RFC 2046
RFC 2047encoded-word
RFC 2047encoded-word
RFC 2048RFC 2048
RFC 2049RFC 2049
RFC 2183Content-Disposition
RFC 822RFC 822
root-entityEntity hierarchy

S
Standards TrackContent-Disposition
Standards Trackencoded-word
Standards TrackRFC 2045
Standards TrackRFC 2046
Standards TrackRFC 2048
Standards TrackRFC 2049
STD 11RFC 822
subtypeContent-Type field
subtypemedia-type

T
textmedia-type
typeContent-Type field

U
us-asciius-ascii
USENETRFC 1036

V
videomedia-type

X
x-tokenmedia-type


11 関数索引

Jump to:   E   M  
Index EntrySection

E
eword-decode-headerHeader encoder/decoder
eword-encode-headerHeader encoder/decoder

M
make-mime-content-typemime-content-type
mel-define-methodmel-backend
mel-define-method-functionmel-backend
mel-define-servicegeneric function for mel-backend
mimecustom
mime-content-dispositionmime-content-disposition
mime-content-disposition-filenamemime-content-disposition
mime-content-disposition-parametermime-content-disposition
mime-content-typemime-content-type
mime-content-type-parametermime-content-type
mime-decode-regionencoder/decoder
mime-decode-stringencoder/decoder
mime-encode-regionencoder/decoder
mime-encoding-alistEncoding information
mime-encoding-listEncoding information
mime-entity-body-endEntity buffer
mime-entity-body-startEntity buffer
mime-entity-bufferEntity buffer
mime-entity-childrenEntity hierarchy
mime-entity-contentEntity-content
mime-entity-content-dispositionEntity Attributes
mime-entity-content-typeEntity Attributes
mime-entity-cooked-pEntity Attributes
mime-entity-encodingEntity Attributes
mime-entity-filenameEntity Attributes
mime-entity-header-endEntity buffer
mime-entity-header-startEntity buffer
mime-entity-node-idEntity hierarchy
mime-entity-numberEntity hierarchy
mime-entity-parentEntity hierarchy
mime-entity-point-maxEntity buffer
mime-entity-point-minEntity buffer
mime-entity-sendRequest for entity
mime-fetch-fieldEntity-header
mime-find-entity-from-content-idEntity Search
mime-find-entity-from-node-idEntity Search
mime-find-entity-from-numberEntity Search
mime-insert-encoded-fileencoder/decoder
mime-insert-entityEntity-network-representation
mime-insert-entity-contentEntity-content
mime-insert-headerentity formatting
mime-insert-text-contententity formatting
mime-open-entityEntity creation
mime-parse-bufferEntity creation
mime-parse-Content-DispositionContent-Disposition parser
mime-parse-Content-Transfer-EncodingContent-Transfer-Encoding parser
mime-parse-Content-TypeContent-Type parser
mime-read-Content-DispositionContent-Disposition parser
mime-read-Content-Transfer-EncodingContent-Transfer-Encoding parser
mime-read-Content-TypeContent-Type parser
mime-read-fieldEntity-header
mime-root-entity-pEntity hierarchy
mime-type/subtype-stringContent-Type utility
mime-write-decoded-regionencoder/decoder
mime-write-entityEntity-network-representation
mime-write-entity-bodyEntity-network-representation
mime-write-entity-contentEntity-content
mm-define-backendmm-backend module
mm-define-methodmm-backend module


12 変数索引


Footnotes

(1)

https://git.savannah.gnu.org/cgit/emacs.git/plain/CONTRIBUTE

(2)

バックトレースの取り方は http://www.jpl.org/elips/BUGS-ja.htmlが参考になります。