1 <!doctype sinfo system>
3 <title>FLIM 1.12 Reference Manual about MIME Features
4 <author>MORIOKA Tomohiko <mail>morioka@jaist.ac.jp</mail>
14 This file documents MIME features of FLIM, a fundamental library to
15 process Internet Messages for GNU Emacsen.
22 FLIM is a library to provide basic features about message
23 representation or encoding.
26 <h1> How to use MIME features
29 Please eval following to use MIME features provided by FLIM:
36 <h1> Message and Entity
39 According to <dref>RFC 2045</dref>, `The term ``entity'', refers
40 specifically to the MIME-defined header fields and contents of either
41 a message or one of the parts in the body of a multipart entity.' In
42 this document, the term <concept>entity</concept> indicates all of
43 header fields and body.
45 The definition of RFC 2045 indicates that a MIME message is a tree,
46 and each node of the tree is an entity. Namely MIME extends message
49 FLIM uses <concept>mime-entity</concept> structure to represent
50 information of entity. In this document, it is called simply
54 <h2> Functions to create mime-entity
55 <node> Entity creation
57 <defun name="mime-open-entity">
60 Open an entity and return it.
62 <var>type</var> is representation-type. <cf node="mm-backend">
64 <var>location</var> is location of entity. Specification of it is
65 depended on representation-type.
68 <defun name="mime-parse-buffer">
71 Parse <var>buffer</var> as message, and set the result to buffer local
72 variable <code>mime-message-structure</code> of <var>buffer</var> as
75 If <var>buffer</var> is omitted, current buffer is used.
77 <var>type</var> is representation-type of created mime-entity. <cf
78 node="mm-backend"> Default value is <var>buffer</var>.
82 <h2> Features about message tree
83 <node> Entity hierarchy
85 Structure of a MIME message is tree.
87 In the tree, root node is the entity indicates all of the message. In
88 this document, it is called <concept>root-entity</concept> or
89 <concept>message</concept>. In FLIM, it is indicated by buffer local
90 variable <code>mime-message-structure</code>.
92 Each entity except root-entity has a parent. An entity may have
93 children. We can indicate an entity by relative position from a base
94 entity, based on the parent-child relationship.
96 In addition, we can indicate an entity by absolute position of the
99 Each entity, which is a node of the tree, can be numbered by
100 depth and left-to-right order of the depth.
106 +-------------------+-------------------+
110 | +---------+---------+ |
111 +--+--+ +--+--+ +--+--+ +--+--+ +--+--+
112 | 0.0 | | 1.0 | | 1.1 | | 1.2 | | 2.0 |
113 +-----+ +-----+ +-----+ +-----+ +-----+
117 Namely, if depth of a node is n, the node has a node-number, which is
118 consists of n integers. In this document, it is called
119 <concept>entity-number</concept>. An entity-number is represented by
120 list of integer, like <code>(1 2 3)</code>.
122 mime-entity has also <concept>node-id</concept>. A node-id is
123 represented by reversed list of entity-number. For example, node-id
124 corresponding with 1.2.3 is <code>(3 2 1)</code>.
126 Each entity can be indicated by entity-number or node-id in
127 <code>mime-message-structure</code>.
129 <defvar name="mime-message-structure">
131 Buffer local variable to store mime-entity structure of message.
134 <defun name="mime-entity-children">
137 Return list of entities included in the <var>entity</var>.
140 <defun name="mime-entity-parent">
141 <args> entity <opts> message
143 Return parent entity of the <var>entity</var>.
145 If <var>message</var> is specified, it is regarded as root instead of
146 <code>mime-message-structure</code>.
149 <defun name="mime-root-entity-p">
152 Return non-<code>nil</code> if <var>entity</var> is root entity
156 <defun name="mime-entity-node-id">
159 Return node-id of <var>entity</var>.
162 <defun name="mime-entity-number">
165 Return entity-number of <var>entity</var>.
172 <defun name="mime-find-entity-from-number">
173 <args> entity-number <opts> message
175 Return entity from <var>entity-number</var> in <var>message</var>.
177 If <var>message</var> is not specified,
178 <code>mime-message-structure</code> is used.
181 <defun name="mime-find-entity-from-node-id">
182 <args> entity-node-id <opts> message
184 Return entity from <var>entity-node-id</var> in <var>message</var>.
186 If <var>message</var> is not specified,
187 <code>mime-message-structure</code> is used.
190 <defun name="mime-find-entity-from-content-id">
191 <args> cid <opts> message
193 Return entity from <var>cid</var> in <var>message</var>.
195 If <var>message</var> is not specified,
196 <code>mime-message-structure</code> is used.
200 <h2> Functions about attributes of mime-entity
201 <node> Entity Attributes
203 <defun name="mime-entity-content-type">
206 Return content-type of <var>entity</var>.
207 <cf node="mime-content-type">
210 <defun name="mime-entity-content-disposition">
213 Return content-disposition of <var>entity</var>. <cf
214 node="mime-content-disposition">
217 <defun name="mime-entity-filename">
220 Return file name of <var>entity</var>.
223 <defun name="mime-entity-encoding">
224 <args> entity <opts> default-encoding
226 Return content-transfer-encoding of <var>entity</var>.
227 <cf node="Content-Transfer-Encoding">
229 If the <var>entity</var> does not have Content-Transfer-Encoding
230 field, this function returns <var>default-encoding</var>. If it is
231 nil, <code>"7bit"</code> is used as default value.
234 <defun name="mime-entity-cooked-p">
237 Return non-nil if contents of <var>entity</var> has been already
242 <h2> Information of entity header
245 <defun name="mime-fetch-field">
246 <args> field-name <opts> entity
248 Return field-body of <var>field-name</var> field in header of
251 The results is network representation.
253 If <var>entity</var> is omitted, <code>mime-message-structure</code>
254 is used as default value.
256 If <var>field-name</var> field is not found, this function returns
260 <defun name="mime-read-field">
261 <args> field-name <opts> entity
263 Parse <var>field-name</var> field in header of <var>entity</var>, and
266 Format of result is depended on kind of field. For non-structured
267 field, this function returns string. For structured field, it returns
268 list corresponding with structure of the field.
270 Strings in the result will be converted to internal representation of
273 If <var>entity</var> is omitted, <code>mime-message-structure</code>
274 is used as default value.
276 If <var>field-name</var> field is not found, this function returns
281 <h2> Text presentation of entity
282 <node> entity formatting
284 <defun name="mime-insert-header">
285 <args> entity <opts> invisible-fields visible-fields
287 Insert before point a decoded contents of header of <var>entity</var>.
289 <var>invisible-fields</var> is list of regexps to match field-name to
290 hide. <var>visible-fields</var> is list of regexps to match
293 If a field-name is matched with some elements of
294 <var>invisible-fields</var> and matched with none of
295 <var>visible-fields</var>, this function don't insert the field.
297 Each <dref>encoded-word</dref> in the header is decoded. ``Raw non
298 us-ascii characters'' are also decoded as
299 <code>default-mime-charset</code>.
302 <defun name="mime-insert-text-content">
305 Insert before point a contents of <var>entity</var> as text entity.
307 Contents of the <var>entity</var> are decoded as <dref>MIME
308 charset</dref>. If the <var>entity</var> does not have charset
309 parameter of Content-Type field, <code>default-mime-charset</code> is
310 used as default value.
313 <defvar name="default-mime-charset">
315 Symbol to indicate default value of <dref>MIME charset</dref>.
317 It is used when MIME charset is not specified.
319 It is originally variable of APEL.
323 <h2> Contents of Entity
324 <node> Entity-content
326 <defun name="mime-entity-content">
329 Return content of <var>entity</var> as byte sequence.
332 <defun name="mime-insert-entity-content">
335 Insert content of <var>entity</var> at point.
338 <defun name="mime-write-entity-content">
339 <args> entity filename
341 Write content of <var>entity</var> into <var>filename</var>.
345 <h2> Network representation of Entity
346 <node> Entity-network-representation
348 <defun name="mime-insert-entity">
351 Insert header and body of <var>entity</var> at point.
354 <defun name="mime-write-entity">
355 <args> entity filename
357 Write representation of <var>entity</var> into <var>filename</var>.
360 <defun name="mime-write-entity-body">
361 <args> entity filename
363 Write body of <var>entity</var> into <var>filename</var>.
367 <h2> Entity as buffer representation
370 <defun name="mime-entity-buffer">
373 Return buffer, which contains <var>entity</var>.
376 <defun name="mime-entity-point-min">
379 Return the start point of <var>entity</var> in the buffer which
380 contains <var>entity</var>.
383 <defun name="mime-entity-point-max">
386 Return the end point of <var>entity</var> in the buffer which
387 contains <var>entity</var>.
390 <defun name="mime-entity-header-start">
393 Return the start point of header of <var>entity</var> in the buffer
394 which contains <var>entity</var>.
397 <defun name="mime-entity-header-end">
400 Return the end point of header of <var>entity</var> in the buffer
401 which contains <var>entity</var>.
404 <defun name="mime-entity-body-start">
407 Return the start point of body of <var>entity</var> in the buffer
408 which contains <var>entity</var>.
411 <defun name="mime-entity-body-end">
414 Return the end point of body of <var>entity</var> in the buffer which
415 contains <var>entity</var>.
419 <h2> Entity representations and implementations
422 Entity is an abstraction. It is designed to use various data
423 representations for their purposes.
425 Each entity has <concept>representation-type</concept>. It must be
426 specified when an entity is created. <cf node="Entity Creation">
428 Functions about entity are implemented by request processing to the
429 entity. Each entity knows its representation-type. Each entity calls
430 processing function corresponding with the representation-type. Such
431 kind of function is called <concept>entity processing
432 method</concept>. A module, consists of them corresponding with a
433 representation-type, is called <concept>mm-backend</concept>.
435 Module name of each mm-backend consists of the prefix <code>mm</code>
436 and its representation-type. The module is required automatically
437 when its entity is created at first.
440 <h3> Message-passing for entity
441 <node> Request for entity
443 <defun name="mime-entity-send">
444 <args> entity message <rest> args
446 Send <var>message</var> to <var>entity</var> with <var>args</var>, and
449 <var>args</var> is arguments of the <var>message</var>.
453 <h3> Definition of mm-backend
454 <node> mm-backend module
456 <defmacro name="mm-define-backend">
460 Define <var>type</var> as a mm-backend.
462 If <var>PARENTS</var> is specified, <var>type</var> inherits parents.
463 Each parent must be representation-type.
468 (mm-define-backend chao (generic))
472 <defmacro name="mm-define-method">
473 <args> name args <rest> body
475 Define <var>name</var> as a method function of (nth 1 (car
476 <var>args</var>)) backend.
478 <var>args</var> is like an argument list of lambda, but (car
479 <var>args</var>) must be specialized parameter. (car (car
480 <var>args</var>)) is name of variable and (nth 1 (car
481 <var>args</var>)) is name of backend (representation-type).
486 (mm-define-method entity-cooked-p ((entity chao)) nil)
491 <h1> Information of Content-Type field
494 <concept>Content-Type field</concept> is a field to indicate kind of
495 contents or data format, such as <dref>media-type</dref> and MIME
496 charset. It is defined in <dref>RFC 2045</dref>.
500 Historically, Content-Type field was proposed in RFC 1049. In it,
501 Content-Type did not distinguish type and subtype, and there are no
502 mechanism to represent kind of character code like MIME charset.
506 FLIM provides parser for Content-Type field and structure
507 <concept>mime-content-type</concept> to store information of
511 <h2> Format of Content-Type field
512 <node> Content-Type field
514 Format of Content-Type field is defined as follows:
517 ``Content-Type'' ``:'' <concept>type</concept> ``/''
518 <concept>subtype</concept> *( ``;'' <concept>parameter</concept> )
525 Content-Type: image/jpeg
531 Content-Type: text/plain; charset=iso-2022-jp
535 `type' and `subtype' indicate format of an entity. In this document,
536 pair of them is called `media-type'. `image/jpeg' or `text/plain' is
541 If an entity does not have Content-Type field, it is regarded as
546 Content-Type: text/plain; charset=us-ascii
555 <h2> mime-content-type structure
556 <node> mime-content-type
558 <define type="Structure" name="mime-content-type">
560 Structure to store information of a Content-Type field.
562 Applications should use reference functions
563 <code>mime-content-type-SLOT</code> to refer information of the
566 Slots of the structure are following:
569 <dt>primary-type<dd>primary type of media-type (symbol).
571 <dt>subtype<dd>subtype of media-type (symbol).
573 <dt>parameters<dd>parameters of Content-Type field (association-list).
578 <defun name="make-mime-content-type">
581 <p>Constructor of content-type.
584 <defun name="mime-content-type-parameter">
585 <args> content-type parameter
587 Return value of <var>parameter</var> of <var>content-type</var>.
592 <node> Content-Type parser
594 <defun name="mime-parse-Content-Type">
597 Parse <var>string</var> as a field-body of Content-Type field, and
598 return the result as <dref>mime-content-type</dref> structure.
601 <defun name="mime-read-Content-Type">
603 Parse Content-Type field of the current buffer, and return the result
604 as <dref>mime-content-type</dref> structure.
606 Return <code>nil</code> if Content-Type field is not found.
610 <h2> Utility functions
611 <node> Content-Type utility
613 <defun name="mime-type/subtype-string">
614 <args> type <opts> subtype
616 Return type/subtype string from <var>type</var> and
621 <h1> Information of Content-Disposition field
622 <node> Content-Disposition
624 <concept>Content-Disposition field</concept> is an optional field to
625 specify presentation of an entity or attributes of an entity, such as
628 <rfc number="2183" type="Standards Track"
629 author="S. Dorner, K. Moore and R. Troost"
630 title="Communicating Presentation Information in Internet
631 Messages: The Content-Disposition Header" date="August
634 FLIM provides parser for Content-Disposition field and structure
635 <concept>mime-content-disposition</concept> to store information of
636 Content-Disposition field.
639 <h2> mime-content-disposition structure
640 <node> mime-content-disposition
642 <define type="Structure" name="mime-content-disposition">
644 Structure to store information of a Content-Disposition field.
646 Applications should use reference functions
647 <code>mime-content-disposition-SLOT</code> to refer information of the
650 Slots of the structure are following:
653 <dt>disposition-type<dd>disposition-type (symbol).
655 <dt>parameters<dd>parameters of Content-Disposition field
661 <defun name="mime-content-disposition-parameter">
662 <args> content-disposition parameter
664 Return value of <var>parameter</var> of
665 <var>content-disposition</var>.
668 <defun name="mime-content-disposition-filename">
669 <args> content-disposition
671 Return filename of <var>content-disposition</var>.
675 <h2> Parser for Content-Disposition field
676 <node> Content-Disposition parser
678 <defun name="mime-parse-Content-Disposition">
681 Parse <var>string</var> as field-body of Content-Disposition field,
682 and return the result as <dref>mime-content-disposition</dref>
686 <defun name="mime-read-Content-Disposition">
688 Parse Content-Disposition field of the current buffer, and return the
689 result as <dref>mime-content-disposition</dref> structure.
691 Return <code>nil</code> if Content-Disposition field is not found.
696 <node> Content-Transfer-Encoding
698 <concept>Content-Transfer-Encoding field</concept> is a header field
699 to indicate body encoding of a entity.
701 FLIM provides parser functions for Content-Transfer-Encoding field.
702 They represent information of Content-Transfer-Encoding field as
705 In addition, FLIM provides encoder/decoder functions by
706 Content-Transfer-Encoding.
710 <node> Content-Transfer-Encoding parser
712 <defun name="mime-parse-Content-Transfer-Encoding">
715 Parse <var>string</var> as a field-body of Content-Transfer-Encoding
716 field, and return the result.
719 <defun name="mime-read-Content-Transfer-Encoding">
720 <opts>default-encoding
722 Parse Content-Transfer-Encoding field of the current buffer, and
725 Return <var>default-encoding</var> if Content-Transfer-Encoding field
726 is not found. If it is not specified, <code>nil</code> is used as the
732 <node> encoder/decoder
734 <defun name="mime-encode-region">
735 <args> start end encoding
737 Encode region <var>start</var> to <var>end</var> of current buffer
738 using <var>encoding</var>.
741 <defun name="mime-decode-region">
742 <args> start end encoding
744 Decode region <var>start</var> to <var>end</var> of current buffer
745 using <var>encoding</var>.
749 <defun name="mime-decode-string">
750 <args> string encoding
752 Decode <var>string</var> which is encoded in <var>encoding</var>, and
757 <defun name="mime-insert-encoded-file">
758 <args> filename encoding
760 Insert file <var>FILENAME</var> encoded by <var>ENCODING</var> format.
763 <defun name="mime-write-decoded-region">
764 <args> start end filename encoding
766 Decode and write current region encoded by <var>encoding</var> into
769 <var>start</var> and <var>end</var> are buffer positions.
774 <node> Encoding information
776 <defun name="mime-encoding-list">
779 Return list of Content-Transfer-Encoding.
781 If <var>service</var> is specified, it returns available list of
782 Content-Transfer-Encoding for it.
785 <defun name="mime-encoding-alist">
788 Return table of Content-Transfer-Encoding for completion.
790 If <var>service</var> is specified, it returns available list of
791 Content-Transfer-Encoding for it.
795 <h2> How to write encoder/decoder module
798 <defmacro name="mel-define-method">
799 <args> name args <rest> body
801 Define <var>name</var> as a method function of (nth 1 (car (last
802 <var>args</var>))) backend.
804 <var>args</var> is like an argument list of lambda, but (car (last
805 <var>args</var>)) must be specialized parameter. (car (car (last
806 <var>args</var>))) is name of variable and (nth 1 (car (last
807 <var>args</var>))) is name of backend (encoding).
812 (mel-define-method mime-write-decoded-region (start end filename
814 "Decode and write current region encoded by base64 into FILENAME.
815 START and END are buffer positions."
817 (list (region-beginning) (region-end)
818 (read-file-name "Write decoded region to file: ")))
819 (let ((str (buffer-substring start end)))
821 (insert (decode-base64-string str))
822 (write-region-as-binary (point-min) (point-max) filename)
827 <defmacro name="mel-define-method-function">
830 Set <var>spec</var>'s function definition to <var>function</var>.
832 First element of <var>spec</var> is service.
834 Rest of <var>args</var> is like an argument list of lambda, but (car
835 (last <var>args</var>)) must be specialized parameter. (car (car
836 (last <var>args</var>))) is name of variable and (nth 1 (car (last
837 <var>args</var>))) is name of backend (encoding).
842 (mel-define-method-function (mime-encode-string string (nil "base64"))
843 'encode-base64-string)
848 <h2> How to add encoding/decoding service
849 <node> generic function for mel-backend
851 <defmacro name="mel-define-service">
853 <opts> args doc-string
855 Define <var>name</var> as a service for Content-Transfer-Encodings.
857 If <var>args</var> is specified, <var>name</var> is defined as a
858 generic function for the service.
863 (mel-define-service encoded-text-encode-string (string encoding)
864 "Encode STRING as encoded-text using ENCODING.
865 ENCODING must be string.")
870 <h1> Network representation of header
873 <concept>RFC 2047</concept> defines the
874 <concept>encoded-word</concept> which is a format to represent
875 non-<dref>ASCII</dref> characters in a header.
877 <rfc number="2047" type="Standards Track" author="K. Moore"
878 title="MIME (Multipurpose Internet Mail Extensions) Part
879 Three: Message Header Extensions for Non-ASCII Text"
880 date="November 1996" obsolete="1521,1522,1590">
882 The encoded-word is the only valid format to represent
883 non-<dref>ASCII</dref> characters in a header, but there are also
884 invalid styles. Such kinds of evil messages represent
885 non-<dref>ASCII</dref> characters in headers without encoded-words (it
886 is called "raw" non-<dref>ASCII</dref> characters).
888 FLIM provides encoding/decoding features of both encoded-word and
889 invalid "raw" non-<dref>ASCII</dref> characters.
892 <h2> Header encoding/decoding
893 <node> Header encoder/decoder
895 <defun name="eword-decode-header">
896 <opts> code-conversion separator
898 Decode MIME encoded-words in header fields.
900 If <var>code-conversion</var> is <code>nil</code>, only encoded-words
901 are decoded. If <var>code-conversion</var> is a <dref>MIME
902 charset</dref>, non-ASCII bit patterns are decoded as the MIME
903 charset. Otherwise non-ASCII bit patterns are decoded as the
904 <code>default-mime-charset</code>. <cf node="entity formatting">
906 If <var>separator</var> is not <code>nil</code>, it is used as header
910 <defun name="eword-encode-header">
911 <opts> code-conversion
913 Encode header fields to network representation, such as MIME
916 Each field is encoded as corresponding method specified by variable
917 <code>eword-field-encoding-method-alist</code>.
920 <defvar name="eword-field-encoding-method-alist">
922 Association list to specify field encoding method. Each element looks
923 like (FIELD . METHOD).
925 If METHOD is <code>mime</code>, the FIELD will be encoded into MIME
926 format (encoded-word).
928 If METHOD is <code>nil</code>, the FIELD will not be encoded.
930 If METHOD is a MIME charset, the FIELD will be encoded as the charset
931 when it must be convert into network-code.
933 Otherwise the FIELD will be encoded as variable
934 <code>default-mime-charset</code> when it must be convert into
939 <h1> Various Customization
942 <define type="group" name="mime">
944 MIME
\e$B4XO"5!G=$K4X$9$k
\e(B group.
946 <code>mail</code>
\e$B$H
\e(B <code>news</code>
\e$B$KB0$9$k!#
\e(B
949 <defvar name="mime-temp-directory">
951 MIME
\e$B5!G=$K4X$9$k<BAu$,0l;~E*$K;HMQ$9$k
\e(B file
\e$B$r:n@.$9$k
\e(B directory.
953 \e$B4D6-JQ?t
\e(B <code>MIME_TMP_DIR</code>, <code>TM_TMP_DIR</code>,
954 <code>TMPDIR</code>, <code>TMP</code>
\e$B$b$7$/$O
\e(B <code>TEMP</code>
\e$B$,@_Dj
\e(B
955 \e$B$5$l$F$$$?>l9g!"$=$l$r=i4|CM$H$7$FMQ$$$k!#2?$b@_Dj$5$l$F$$$J$$>l9g!"
\e(B
956 <code>"/tmp/"</code>
\e$B$rMQ$$$k!#
\e(B
969 <concept>7bit</concept> means any integer between 0 .. 127.
971 Any data represented by 7bit integers is called <concept>7bit
974 Textual string consisted of Control characters between 0 .. 31 and
975 127, and space represented by 32, and graphic characters between 33
976 .. 236 are called <concept>7bit (textual) string</concept>.
978 Conventional Internet <a node="MTA">MTA</a> can translate 7bit data,
979 so it is no need to translate by <a
980 node="Quoted-Printable">Quoted-Printable</a> or <a
981 node="Base64">Base64</a> for 7bit data.
983 However if there are too long lines, it can not translate by 7bit MTA
984 even if it is 7bit data. <dref>RFC 821</dref> and <dref>RFC
985 2045</dref> require lines in 7bit data must be less than 998 bytes.
986 So if a ``7bit data'' has a line more than 999 bytes, it is regarded
987 as <dref>binary</dref>. For example, Postscript file should be
988 encoded by Quoted-Printable.
994 <concept>8bit</concept> means any integer between 0 .. 255.
996 Any data represented by 8bit integers is called <concept>8bit
999 Textual string consisted of Control characters between 0 .. 31, 127,
1000 and 128 .. 159, and space represented by 32, and graphic characters
1001 between 33 .. 236 and 160 .. 255 are called <concept>8bit (textual)
1004 For example, <dref>iso-8859-1</dref> or <dref>euc-kr</dref> are
1005 coded-character-set represented by 8bit textual string.
1007 Traditional Internet <a node="MTA">MTA</a> can translate only
1008 <dref>7bit</dref> data, so if a 8bit data will be translated such MTA,
1009 it must be encoded by <dref>Quoted-Printable</dref> or
1010 <dref>Base64</dref>.
1012 However 8bit MTA are increasing today.
1014 However if there are too long lines, it can not translate by 8bit MTA
1015 even if it is 8bit data. <dref>RFC 2045</dref> require lines in 8bit
1016 data must be less than 998 bytes. So if a ``8bit data'' has a line
1017 more than 999 bytes, it is regarded as <dref>binary</dref>, so it must
1018 be encoded by Base64 or Quoted-Printable.
1024 <concept>ASCII</concept> is a 94-character set contains primary latin
1025 characters (A-Z, a-z), numbers and some characters. It is a standard
1026 of the United States of America. It is a variant of <a node="ISO
1029 <standard abbrev="ASCII" title-en="Coded Character Set -- 7-Bit
1030 American Standard Code for Information Interchange"
1031 number="ANSI X3.4" year="1986">
1037 <concept>Base64</concept> is a transfer encoding method of
1038 <dref>MIME</dref> defined in <dref>RFC 2045</dref>.
1040 The encoding process represents 24-bit groups of input bits as output
1041 strings of 4 encoded characters. Encoded characters represent integer
1042 0 .. 63 or <concept>pad</concept>. Base64 data must be 4 * n bytes,
1043 so pad is used to adjust size.
1045 These 65 characters are subset of all versions of ISO 646, including
1046 US-ASCII, and all versions of EBCDIC. So it is safe even if it is
1047 translated by non-Internet gateways.
1053 Any byte stream is called <concept>binary</concept>.
1055 It does not require structureof lines. It differs from from <a
1056 node="8bit">8bit</a>.
1058 In addition, if line structured data contain too long line (more than
1059 998 bytes), it is regarded as binary.
1062 <h3> Coded character set, Character code
1063 <node> coded character set
1065 A set of unambiguous rules that establishes a character set and the
1066 one-to-one relationship between the characters of the set and their
1073 <concept>media-type</concept> specifies the nature of the data in the
1074 body of <dref>MIME</dref> <dref>entity</dref>. It consists of
1075 <concept>type</concept> and <concept>subtype</concept>. It is defined
1076 in <dref>RFC 2046</dref>.
1078 Currently there are following standard primary-types:
1081 <li><concept>text</concept>
1083 <li><concept>image</concept>
1085 <li><concept>audio</concept>
1087 <li><concept>video</concept>
1089 <li><concept>application</concept>
1091 <li><a node="multipart"><concept>multipart</concept></a>
1093 <li><concept>message</concept>
1097 And there are various subtypes, for example, application/octet-stream,
1098 audio/basic, image/jpeg, <dref>multipart/mixed</dref>,
1099 <dref>text/plain</dref>, video/mpeg...
1102 You can refer registered media types at <a
1103 href="ftp://ftp.isi.edu/in-notes/iana/assignments/media-types">MEDIA
1106 In addition, you can use private type or subtype using
1107 <concept>x-token</concept>, which as the prefix `x-'. However you can
1108 not use them in public.
1110 <cf node="Content-Type field">
1116 In this document, it means mail defined in <dref>RFC 822</dref> and
1117 news message defined in <dref>RFC 1036</dref>.
1123 MIME stands for <concept>Multipurpose Internet Mail
1124 Extensions</concept>, it is an extension for <dref>RFC 822</dref>.
1126 According to RFC 2045:
1128 STD 11, RFC 822, defines a message representation protocol specifying
1129 considerable detail about US-ASCII message headers, and leaves the
1130 message content, or message body, as flat US-ASCII text. This set of
1131 documents, collectively called the Multipurpose Internet Mail
1132 Extensions, or MIME, redefines the format of messages to allow for
1135 <li>textual message bodies in character sets other than US-ASCII,
1137 <li>an extensible set of different formats for non-textual message
1140 <li>multi-part message bodies, and
1142 <li>textual header information in character sets other than US-ASCII.
1146 It is defined in <dref>RFC 2045</dref>, <dref>RFC 2046</dref>, <a
1147 node="encoded-word">RFC 2047</a>, <dref>RFC 2048</dref> and <dref>RFC
1154 <a node="coded character set">Coded character set</a> used in
1155 <dref>Content-Type field</dref> or charset parameter of <a
1156 node="encoded-word">encoded-word</a>.
1158 It is defined in <dref>RFC 2045</dref>.
1160 <dref>iso-2022-jp</dref> or <dref>euc-kr</dref> are kinds of it. (In
1161 this document, MIME charsets are written by small letters to
1162 distinguish <dref>graphic character set</dref>. For example, ISO
1163 8859-1 is a graphic character set, and iso-8859-1 is a MIME charset)
1169 <concept>Message Transfer Agent</concept>. It means mail transfer
1170 programs (ex. sendmail) and news servers.
1178 <concept>Message User Agent</concept>. It means mail readers and news
1184 <h3> Quoted-Printable
1185 <node> Quoted-Printable
1187 <concept>Quoted-Printable</concept> is a transfer encoding method of
1188 <dref>MIME</dref> defined in <dref>RFC 2045</dref>.
1190 If the data being encoded are mostly US-ASCII text, the encoded form
1191 of the data remains largely recognizable by humans.
1199 A RFC defines format of Internet mail message, mainly <concept>message
1204 news message is based on RFC 822, so <concept>Internet
1205 message</concept> may be more suitable than <concept>Internet
1209 <rfc number="822" type="STD 11" author="D. Crocker" title="Standard
1210 for the Format of ARPA Internet Text Messages"
1217 A RFC defines format of USENET message. It is a subset of <dref>RFC
1218 822</dref>. It is not Internet standard, but a lot of netnews
1219 excepting Usenet uses it.
1221 <rfc name="USENET" number="1036" author="M. Horton and R. Adams"
1222 title="Standard for Interchange of USENET Messages"
1223 date="December 1987" obsolete="850">
1229 <rfc number="2045" type="Standards Track" author="N. Freed and
1230 N. Borenstein" title="Multipurpose Internet Mail
1231 Extensions (MIME) Part One: Format of Internet Message
1232 Bodies" date="November 1996" obsolete="1521, 1522,
1239 <rfc number="2046" type="Standards Track" author="N. Freed and
1240 N. Borenstein" title="Multipurpose Internet Mail
1241 Extensions (MIME) Part Two: Media Types"
1242 date="November 1996" obsolete="1521, 1522, 1590">
1248 <rfc number="2048" type="Standards Track" author="N. Freed, J. Klensin
1249 and J. Postel" title="Multipurpose Internet Mail
1250 Extensions (MIME) Part Four: Registration Procedures"
1251 date="November 1996" obsolete="1521, 1522, 1590">
1257 <rfc number="2049" type="Standards Track" author="N. Freed and
1258 N. Borenstein" title="Multipurpose Internet Mail
1259 Extensions (MIME) Part Five: Conformance Criteria and
1260 Examples" date="November 1996" obsolete="1521, 1522,
1267 A textual data represented by only <dref>coded character set</dref>.
1268 It does not have information about font or typesetting.
1269 <cf node="text/plain">
1275 A <a node="MIME charset">MIME charset</a> for primary Latin script
1276 mainly written by English or other languages.
1278 It is a 7bit <dref>coded character set</dref> based on <dref>ISO
1279 2022</dref>, it contains only
1280 <dref>ASCII</dref> and <dref>code extension</dref> is not allowed.
1282 It is standard coded character set of Internet mail. If MIME charset
1283 is not specified, <concept>us-ascii</concept> is used as default.
1285 In addition, <concept>ASCII</concept> of <dref>RFC 822</dref> should
1286 be interpreted as us-ascii.
1289 <h2> How to report bugs
1292 If you write bug-reports and/or suggestions for improvement, please
1293 send them to the EMACS-MIME Mailing List:
1296 <li> English <mail>emacs-mime-en@m17n.org</mail>
1297 <li> Japanese <mail>emacs-mime-ja@m17n.org</mail>
1301 Notice that, we do not welcome bug reports about too old version.
1302 Bugs in old version might be fixed. So please try latest version at
1305 You should write <concept>good bug report</concept>. If you write
1306 only ``FLIM does not work'', we can not find such situations. At
1307 least, you should write name, type, variants and version of OS, emacs,
1308 APEL, FLIM, SEMI and MUA, and setting. In addition, if error occurs,
1309 to send backtrace is very important. <cf file="emacs" node="Bugs">
1311 Bug may not appear only your environment, but also in a lot of
1312 environment (otherwise it might not bug). Therefor if you send mail
1313 to author directly, we must write a lot of mails. So please send mail
1314 to address for EMACS-MIME Mailing List instead of author.
1317 Via the EMACS-MIME ML, you can report FLIM bugs, obtain the latest
1318 release of FLIM, and discuss future enhancements to FLIM. To join the
1319 EMACS-MIME ML, send an empty e-mail to:
1322 <li> English <mail>emacs-mime-en-ctl@m17n.org</mail>
1323 <li> Japanese <mail>emacs-mime-ja-ctl@m17n.org</mail>
1327 <h2> CVS based development
1330 FLIM
\e$B$N
\e(B file
\e$B$O
\e(B CVS
\e$B$r;H$C$F4IM}$5$l$F$$$^$9!#$3$N$?$a!"0J2<$NJ}K!$G:G
\e(B
1331 \e$B?7$N
\e(B FLIM
\e$B$rF~<j$9$k$3$H$,$G$-$^$9!'
\e(B
1336 % cvs -d :pserver:anonymous@chamonix.jaist.ac.jp:/hare/cvs/root \
1339 CVS password: [CR] # NULL string
1343 % cvs -d :pserver:anonymous@chamonix.jaist.ac.jp:/hare/cvs/root \
1344 checkout [-r TAG] flim
1348 CVS
\e$B$rMQ$$$?3+H/$K;22C$7$?$$J}$O
\e(B
1351 <li> <mail>cvs@chamonix.jaist.ac.jp</mail>
1355 \e$B$^$G!"%"%+%&%s%HL>$H
\e(B ssh
\e$B$N8x3+80$rAw$C$F$/$@$5$$!#
\e(Bssh
\e$B7PM3$G$O!"
\e(B
1356 cvsroot
\e$B$O
\e(B :ext:cvs@cvs.m17n.org:/cvs/root
\e$B$H$J$j$^$9!#
\e(B
1358 \e$B$I$&$7$F$b
\e(B ssh
\e$B$,;H$($J$$>l9g!"
\e(Bpserver
\e$B7PM3$G$b3+H/$K;22C$G$-$^$9!#
\e(B
1359 \e$B$3$N>l9g!"
\e(BUNIX
\e$B$N
\e(B /etc/passwd
\e$BMM<0$G0E9f2=$5$l$?%Q%9%o!<%I$rAw$C$F2<$5$$!#
\e(B
1360 \e$B$3$N>l9g
\e(B cvsroot
\e$B$O
\e(B :pserver:<
\e$B%"%+%&%s%HL>
\e(B>@cvs.m17n.org:/cvs/root
\e$B$H$J$j$^$9!#
\e(B
1363 <h2> History of FLIM
1366 FLIM
\e$B$N
\e(B code
\e$B$N:G8E$NItJ,$O
\e(B
\e$B1]JB
\e(B
\e$B;LCR
\e(B
\e$B;a$,=q$$$?
\e(B <file>mime.el</file>
1367 \e$B$K5/8;$7$^$9!#$3$N>.$5$J
\e(B program
\e$B$O
\e(B Nemacs
\e$B$GF0:n$9$k
\e(B iso-2022-jp
\e$B$N
\e(B
1368 B-encoding
\e$B@lMQ$N
\e(B encoded-word
\e$B$NI|9f2=%W%m%0%i%`$G$7$?!#
\e(B
1370 \e$B$=$N8e!"<i2,
\e(B
\e$BCNI'
\e(B
\e$B$O
\e(B <file>mime.el</file>
\e$B$r85$K
\e(B
1371 <file>tiny-mime.el</file>
\e$B$H$$$&%W%m%0%i%`$r=q$-$^$9!#$3$l$O!"
\e(BNemacs
1372 \e$B$H
\e(B Mule
\e$B$GF0:n$9$k
\e(B encoded-word
\e$B$NId9f2=!&I|9f2=%W%m%0%i%`$G$7$?!#
\e(B
1373 <file>tiny-mime.el</file>
\e$B$O
\e(B B-encoding
\e$B$@$1$G$J$/
\e(B Q-encoding
\e$B$b
\e(B
1374 support
\e$B$7!"$^$?!"
\e(BMULE
\e$B$G07$&$3$H$,$G$-$k$5$^$6$^$J
\e(B <dref>MIME
1375 charset</dref>
\e$B$rF1;~$K;H$&$3$H$,$G$-$^$7$?!#$3$N;~!"
\e(BNemacs
\e$B$H
\e(B Mule
\e$B$N
\e(B
1376 \e$BAPJ}$r
\e(B support
\e$B$9$k$?$a$KMQ$$$i$l$?%F%/%K%C%/$O8e$K
\e(B emu package
\e$B$K$^$H
\e(B
1377 \e$B$a$i$l$^$9!#
\e(B
1379 \e$B$3$N:"!"<i2,
\e(B
\e$BCNI'
\e(B
\e$B$O
\e(B <file>tiny-mime.el</file>
\e$B$r$5$^$6$^$J
\e(B MUA
\e$B$G;H$&
\e(B
1380 \e$B$?$a$N@_Dj=8$bG[I[$7$F$$$^$7$?$,!"$=$l$i$O8e$K
\e(B
1381 <file>tiny-mime.el</file>
\e$B$H$H$b$K#1$D$N
\e(B package
\e$B$K$^$H$a$i$l!"
\e(Btm
\e$B$H$$
\e(B
1382 \e$B$&L>A0$GG[I[$5$l$^$9!#
\e(B
1384 \e$B<i2,
\e(B
\e$BCNI'
\e(B
\e$B$O$d$,$F!"
\e(BMIME message
\e$B$r1\Mw$9$k$?$a$N%W%m%0%i%`$G$"$k
\e(B
1385 <file>tm-body.el</file>
\e$B$r=q$-$^$9!#$3$l$O!"$9$0$K
\e(B
1386 <file>tm-view.el</file>
\e$B$H$$$&L>A0$KJQ$o$j$^$7$?$,!"$d$,$F!"$3$l$,
\e(B
1387 <file>tiny-mime.el</file>
\e$B$KBe$o$C$F!"
\e(Btm
\e$B$NCf3K$H$J$j$^$9!#
\e(B
1389 <file>tm-view.el</file>
\e$B$OEvA3!"
\e(BContent-Transfer-Encoding
\e$B$r07$&I,MW$,
\e(B
1390 \e$B$"$j$^$9!#$3$NL\E*$N$?$a$K!"
\e(BMEL
\e$B$,@0Hw$5$l$O$8$a$^$7$?!#
\e(BBase64
\e$B$K4X$7
\e(B
1391 \e$B$F$O
\e(B <file>tiny-mime.el</file>
\e$B$N
\e(B code
\e$B$,0\$5$l!"$^$?!"?7$?$K
\e(B
1392 Quoted-Printable
\e$B$N
\e(B code
\e$B$,DI2C$5$l$^$7$?!#$3$l$i$,
\e(B
1393 <file>mel-b.el</file>
\e$B$H
\e(B <file>mel-q.el</file>
\e$B$K$J$j$^$7$?!#
\e(B
1395 \e$B$^$?!"8e$K!"<i2,
\e(B
\e$BCNI'
\e(B
\e$B$K$h$C$F
\e(B uuencode
\e$BMQ$N
\e(B <file>mel-u.el</file>
\e$B$,
\e(B
1396 \e$BDI2C$5$l!"$=$N8e$K!">.NS
\e(B
\e$B=$J?
\e(B
\e$B;a$K$h$C$F
\e(B x-gzip64
\e$BMQ$N
\e(B
1397 <file>mel-g.el</file>
\e$B$,DI2C$5$l$^$7$?!#
\e(B
1399 tm
\e$B$G$O8e$K!"<i2,
\e(B
\e$BCNI'
\e(B
\e$B$K$h$C$F
\e(B <file>tiny-mime.el</file>
\e$B$N:F<BAu$,9T
\e(B
1400 \e$B$o$l!"$3$N2aDx$G!"
\e(BSTD 11
\e$B$N
\e(B parser
\e$B$,=q$+$l$^$7$?!#$3$l$O!"8=:_$N
\e(B
1401 <file>std11.el</file>
\e$B$KEv$?$j$^$9!#$^$?!"$3$N2aDx$G
\e(B
1402 <file>tiny-mime.el</file>
\e$B$OI|9f2=$r9T$&
\e(B <file>tm-ew-d.el</file>
\e$B$HId
\e(B
1403 \e$B9f2=$r9T$&
\e(B <file>tm-ew-e.el</file>
\e$B$KJ,$1$i$l$^$7$?!#$3$NN><T$,8=:_$N
\e(B
1404 <file>eword-decode.el</file>
\e$B$H
\e(B <file>eword-encode.el</file>
\e$B$N@hAD$K
\e(B
1405 \e$BEv$?$j$^$9!#
\e(B
1407 \e$B8e$K!"<i2,
\e(B
\e$BCNI'
\e(B
\e$B$i$K$h$C$F
\e(B tm
\e$B$NA4LL=q$-49$(:n6H$,9T$o$l!"$3$N2aDx$G!"
\e(B
1408 tm
\e$B$O
\e(B APEL, MEL, SEMI, EMH, RMAIL-MIME, Gnus-MIME
\e$B$J$I$KJ,$1$i$l$^$7$?!#
\e(B
1409 \e$B$3$N$&$A$N
\e(B MEL
\e$B$,
\e(B FLIM
\e$B$ND>@\$N@hAD$KEv$?$j$^$9!#
\e(B
1411 \e$B8e$K!"
\e(BAPEL
\e$B$+$i
\e(B <file>std11.el</file>
\e$B$,0\$5$l!"$^$?!"
\e(B
1412 <file>mailcap.el</file>, <file>eword-decode.el</file>
\e$B$*$h$S
\e(B
1413 <file>eword-encode.el</file>
\e$B$,
\e(B SEMI
\e$B$+$i0\$5$l!"
\e(Bpackage
\e$B$NL>A0$,
\e(B FLIM
1414 \e$B$H$J$j$^$9!#
\e(B
1416 \e$B$3$ND>A0$+$iEDCf
\e(B
\e$BE/
\e(B
\e$B;a$,$h$j
\e(B RFC
\e$B$KCi<B$J<BAu$r=q$-;O$a!"$3$l$O!"8=:_!"
\e(B
1417 FLIM
\e$B$N;^$G$"$k
\e(B ``FLIM-FLAM''
\e$B$H$J$C$F$$$^$9!#
\e(B
1421 <node> Concept Index
1427 <node> Function Index
1433 <node> Variable Index