1 <!doctype sinfo system>
3 <title>FLIM 1.8 Manual about MIME Features
4 <author>MORIOKA Tomohiko <mail>morioka@jaist.ac.jp</mail>
14 This file documents MIME features of FLIM, a Internet message
15 parsing/encoding library for GNU Emacs.
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 An message is a tree, each node is an entity, like following figure.
47 Namely MIME extends message to tree structure.
49 FLIM uses <concept>mime-entity</concept> structure to represent
50 information of entity. In this document, it is called simply
53 \e$BA0=R$N$h$&$K!"
\e(Bmessage
\e$BCf$N3F
\e(B entity
\e$B$OLZ$N@a$KEv$?$j$^$9$,!"$3$NLZ$K$O
\e(B
54 \e$B?<$5$HF1$8?<$5$NCf$N=gHV$K=>$C$FHV9f$,IU$1$k$3$H$,$G$-$^$9!#B($A!"
\e(B
58 \e$B("
\e(B nil
\e$B("
\e(B
60 \e$B(#(!(!(!(!(!(!(!(!(!(+(!(!(!(!(!(!(!(!(!($
\e(B
61 \e$B(#(*($
\e(B
\e$B(#(*($
\e(B
\e$B(#(*($
\e(B
62 \e$B("#0("
\e(B
\e$B("#1("
\e(B
\e$B("#2("
\e(B
63 \e$B(&(((%
\e(B
\e$B(&(((%
\e(B
\e$B(&(((%
\e(B
64 \e$B("
\e(B
\e$B(#(!(!(!(!(+(!(!(!(!($
\e(B
\e$B("
\e(B
65 \e$B(#(!(*(!($(#(!(*(!($(#(!(*(!($(#(!(*(!($(#(!(*(!($
\e(B
66 \e$B("
\e(B
\e$B#0
\e(B.
\e$B#0("("
\e(B
\e$B#1
\e(B.
\e$B#0("("
\e(B
\e$B#1
\e(B.
\e$B#1("("
\e(B
\e$B#1
\e(B.
\e$B#2("("
\e(B
\e$B#2
\e(B.
\e$B#0("
\e(B
67 \e$B(&(!(!(!(%(&(!(!(!(%(&(!(!(!(%(&(!(!(!(%(&(!(!(!(%
\e(B
71 <noindent>
\e$B$N$h$&$K?<$5
\e(B n
\e$B$N@a$K$OD9$5
\e(B n
\e$B$N@0?tNs$N@aHV9f$,?6$l$^$9!#$3$l
\e(B
72 \e$B$r
\e(B <concept>entity-number</concept>
\e$B$H8F$S$^$9!#
\e(Bentity-number
\e$B$O
\e(B S
\e$B<0$H
\e(B
73 \e$B$7$F$O
\e(B <code>(1 2 3)</code>
\e$B$N$h$&$J@0?t$N%j%9%H$H$7$FI=8=$5$l$^$9!#
\e(B
75 mime-entity
\e$B$G$O!"$3$l$HF1MM$N
\e(B <concept>node-id</concept>
\e$B$rMQ$$$^$9!#
\e(B
76 node-id
\e$B$O$A$g$&$I
\e(B entity-number
\e$B$r5U$K$7$?%j%9%H$G!"
\e(Bentity-number
77 1.2.3
\e$B$KBP1~$9$k
\e(B node-id
\e$B$O
\e(B <code>(3 2 1)</code>
\e$B$G$9!#
\e(B
79 \e$BA0=R$N$h$&$K!"
\e(BMIME message
\e$B$O
\e(B entity
\e$B$rC10L$H$7$?LZ9=B$$K$J$C$F$$$k$N$G!"
\e(B
80 \e$B$3$N:,$G$"$k
\e(B message
\e$BA4BN$b
\e(B mime-entity
\e$B$GI=8=$9$k$3$H$,$G$-!"
\e(Bbuffer
81 local
\e$BJQ?t
\e(B <code>mime-message-structure</code>
\e$B$K3JG<$9$k$3$H$K$7$^$9!#
\e(B
82 \e$B$=$7$F!"
\e(Bentity-number
\e$B$d
\e(B node-id
\e$B$rMQ$$$k$3$H$G
\e(B
83 <code>mime-message-structure</code>
\e$B$K$*$1$k
\e(B entity
\e$B$NAjBPE*$J0LCV4X78$r
\e(B
84 \e$B07$&$3$H$,$G$-$^$9!#
\e(B
87 <h2> Functions to create mime-entity
88 <node> Entity creation
90 <defun name="mime-open-entity">
93 Open an entity and return it.
95 <var>type</var> is representation-type. <cf node="mm-backend">
97 <var>location</var> is location of entity. Specification of it is
98 depended on representation-type.
101 <defun name="mime-parse-message">
102 <opts> default-ctl node-id
104 Parse current buffer as message, and return the result as mime-entity.
107 <defun name="mime-parse-buffer">
110 Parse <var>buffer</var> as message, and set the result to buffer local
111 variable <code>mime-message-structure</code> of <var>buffer</var> as
114 If <var>buffer</var> is omitted, current buffer is used.
118 <h2> Features about message tree
119 <node> Entity hierarchy
121 <defvar name="mime-message-structure">
123 Buffer local variable to store mime-entity structure of message.
126 <defun name="mime-entity-children">
129 Return list of entities included in the <var>entity</var>.
132 <defun name="mime-entity-parent">
133 <args> entity <opts> message
135 Return parent entity of the <var>entity</var>.
137 If <var>message</var> is specified, it is regarded as root instead of
138 <code>mime-message-structure</code>.
141 <defun name="mime-root-entity-p">
144 Return non-<code>nil</code> if <var>entity</var> is root entity
148 <defun name="mime-entity-node-id">
151 Return node-id of <var>entity</var>.
154 <defun name="mime-entity-number">
157 Return entity-number of <var>entity</var>.
160 <defun name="mime-find-entity-from-number">
161 <args> entity-number <opts> message
163 Return entity from <var>entity-number</var> in <var>message</var>.
165 If <var>message</var> is not specified,
166 <code>mime-message-structure</code> is used.
169 <defun name="mime-find-entity-from-node-id">
170 <args> entity-node-id <opts> message
172 Return entity from <var>entity-node-id</var> in <var>message</var>.
174 If <var>message</var> is not specified,
175 <code>mime-message-structure</code> is used.
179 <h2> Functions about attributes of mime-entity
180 <node> Entity Attributes
182 <defun name="mime-entity-content-type">
185 Return content-type of <var>entity</var>.
186 <cf node="mime-content-type">
189 <defun name="mime-entity-content-disposition">
192 Return content-disposition of <var>entity</var>. <cf
193 node="mime-content-disposition">
196 <defun name="mime-entity-filename">
199 Return file name of <var>entity</var>.
202 <defun name="mime-entity-encoding">
205 Return content-transfer-encoding of <var>entity</var>.
206 <cf node="Content-Transfer-Encoding">
209 <defun name="mime-entity-cooked-p">
212 Return non-nil if contents of <var>entity</var> has been already
217 <h2> Information of entity header
220 <defun name="mime-fetch-field">
221 <args> field-name <opts> entity
223 Return field-body of <var>field-name</var> field in header of
226 The results is network representation.
228 If <var>entity</var> is omitted, <code>mime-message-structure</code>
229 is used as default value.
231 If <var>field-name</var> field is not found, this function returns
235 <defun name="mime-read-field">
236 <args> field-name <opts> entity
238 Parse <var>field-name</var> field in header of <var>entity</var>, and
241 Format of result is depended on kind of field. For non-structured
242 field, this function returns string. For structured field, it returns
243 list corresponding with structure of the field.
245 Strings in the result will be converted to internal representation of
248 If <var>entity</var> is omitted, <code>mime-message-structure</code>
249 is used as default value.
251 If <var>field-name</var> field is not found, this function returns
255 <defun name="mime-insert-decoded-header">
256 <args> entity <opts> invisible-fields visible-fields
258 Insert before point a decoded contents of header of <var>entity</var>.
260 <var>invisible-fields</var> is list of regexps to match field-name to
261 hide. <var>visible-fields</var> is list of regexps to match
264 If a field-name is matched with some elements of
265 <var>invisible-fields</var> and matched with none of
266 <var>visible-fields</var>, this function don't insert the field.
270 <h2> Contents of Entity
271 <node> Entity-content
273 <defun name="mime-entity-content">
276 Return content of <var>entity</var> as byte sequence.
279 <defun name="mime-write-entity-content">
280 <args> entity filename
282 Write content of <var>entity</var> into <var>filename</var>.
285 <defun name="mime-write-entity">
286 <args> entity filename
288 Write representation of <var>entity</var> into <var>filename</var>.
291 <defun name="mime-write-entity-body">
292 <args> entity filename
294 Write body of <var>entity</var> into <var>filename</var>.
298 <h2> Entity as buffer representation
301 <defun name="mime-entity-buffer">
304 Return buffer, which contains <var>entity</var>.
307 <defun name="mime-entity-point-min">
310 Return the start point of <var>entity</var> in the buffer which
311 contains <var>entity</var>.
314 <defun name="mime-entity-point-max">
317 Return the end point of <var>entity</var> in the buffer which
318 contains <var>entity</var>.
321 <defun name="mime-entity-header-start">
324 Return the start point of header of <var>entity</var> in the buffer
325 which contains <var>entity</var>.
328 <defun name="mime-entity-header-end">
331 Return the end point of header of <var>entity</var> in the buffer
332 which contains <var>entity</var>.
335 <defun name="mime-entity-body-start">
338 Return the start point of body of <var>entity</var> in the buffer
339 which contains <var>entity</var>.
342 <defun name="mime-entity-body-end">
345 Return the end point of body of <var>entity</var> in the buffer which
346 contains <var>entity</var>.
350 <h2> Entity representations and implementations
353 Entity
\e$B$OCj>]2=$5$l$?%G!<%?I=8=$G!"<B:]$N%G!<%?I=8=$H$7$F$OMQES$K1~$8$F
\e(B
354 \e$B$5$^$6$^$J$b$N$,MxMQ$G$-$k$h$&$K@_7W$5$l$F$$$^$9!#
\e(B
356 \e$B$3$3$G!"
\e(Bentity
\e$B$,$I$&$$$&<oN`$NI=8=$r9T$C$F$$$k$+$r<($9$N$,
\e(B
357 <concept>representation-type</concept>
\e$B$G!"
\e(Bentity
\e$B$r@8@.$9$k;~$K$O$3$l$r
\e(B
358 \e$B;XDj$7$^$9!#
\e(B<cf node="Entity Creation">
360 \e$BA0@a$^$G$K=R$Y$FMh$?
\e(B entity
\e$B$KBP$9$k=hM}$O!"
\e(Bentity
\e$B$KBP$7$F$=$N=hM}$r0M
\e(B
361 \e$BMj$9$k$3$H$K$h$C$F<B8=$5$l$F$$$^$9!#
\e(BEntity
\e$B$O<+J,$N
\e(B
362 representation-type
\e$B$rCN$C$F$*$j!"$=$N
\e(B representation-type
\e$B$K1~$8$F<B:]
\e(B
363 \e$B$N=hM}$r9T$&4X?t$r8F$S=P$7$^$9!#$3$N$h$&$J4X?t$r
\e(B <concept>entity
\e$B=hM}
\e(B
364 method</concept>
\e$B$H8F$S$^$9!#$^$?!"
\e(Brepresentation-type
\e$BKh$K$3$N$h$&$J4X
\e(B
365 \e$B?t$r$^$H$a$?$b$N$r
\e(B <concept>mm-backend</concept>
\e$B$H8F$S$^$9!#
\e(B
367 mm-backend
\e$B$O
\e(B representation-type
\e$B$NL>A0$N@hF,$K
\e(B <code>mm</code>
\e$B$H$$$&
\e(B
368 \e$B@\F,<-$rIU$1$?4X?tL>$+$i$J$k
\e(B module
\e$B$G!"$=$N
\e(B module
\e$BL>$OF1MM$K
\e(B
369 representation-type
\e$B$NL>A0$N@hF,$K
\e(B <code>mm</code>
\e$B$rIU$1$?$b$N$K$J$C$F
\e(B
370 \e$B$$$^$9!#$3$N
\e(B module
\e$B$O
\e(B representation-type
\e$B$N
\e(B entity
\e$B$,:G=i$K@8@.$5$l$k
\e(B
371 \e$B;~$K<+F0E*$K
\e(B require
\e$B$5$l$^$9!#
\e(B
374 <h3> Message-passing for entity
375 <node> Request for entity
377 <defun name="mime-entity-send">
378 <args> entity message <rest> args
380 <var>entity</var>
\e$B$K
\e(B <var>message</var>
\e$B$rAw$k!#
\e(B
382 <var>args</var>
\e$B$O
\e(B <var>message</var>
\e$B$N0z?t$G$"$k!#
\e(B
386 <h3> How to make mm-backend
387 <node> mm-backend module
389 \e$B!J$9$_$^$;$s!#$=$N$&$A=q$-$^$9
\e(B (^_^;
\e$B!K
\e(B
391 \e$B!J$H$j$"$($:!"
\e(Bmm*.el
\e$B$r;29M$K$7$F$/$@$5$$!K
\e(B
394 <h1> Information of Content-Type field
397 <concept>Content-Type field</concept> is a field to indicate kind of
398 contents or data format, such as <dref>media-type</dref> and MIME
399 charset. It is defined in <dref>RFC 2045</dref>.
403 Historically, Content-Type field was proposed in RFC 1049. In it,
404 Content-Type did not distinguish type and subtype, and there are no
405 mechanism to represent kind of character code like MIME charset.
409 FLIM provides parser for Content-Type field and structure
410 <concept>mime-content-type</concept> to store information of
414 <h2> Format of Content-Type field
415 <node> Content-Type field
417 Content-Type
\e$BMs$N7A<0$O0J2<$N$h$&$KDj5A$5$l$F$$$^$9!'
\e(B
420 ``Content-Type'' ``:'' <concept>type</concept> ``/''
421 <concept>subtype</concept> *( ``;'' <concept>parameter</concept> )
428 Content-Type: image/jpeg
437 Content-Type: text/plain; charset=iso-2022-jp
442 \e$B$J$I$N$h$&$KMQ$$$i$l$^$9!#
\e(B
444 \e$B$3$3$G!"
\e(B`type'
\e$B$H
\e(B `subtype'
\e$B$O
\e(B entity
\e$B$N7A<0$r<($9$b$N$G!"N><T$rAm>N$7
\e(B
445 \e$B$F!"
\e(B`media-type'
\e$B$H8F$V$3$H$K$7$^$9!#>e5-$NNc$K$*$1$k
\e(B `image/jpeg'
\e$B$d
\e(B
446 `text/plain'
\e$B$O
\e(B media-type
\e$B$N#1$D$G$9!#
\e(B
450 Content-Type
\e$BMs$N$J$$
\e(B entity
\e$B$O
\e(B
454 Content-Type: text/plain; charset=us-ascii
459 \e$B$H$7$F2r<a$5$l$k!#
\e(B<cf node="us-ascii">
463 <h2> mime-content-type structure
464 <node> mime-content-type
466 <define type="Structure" name="mime-content-type">
468 Content-Type
\e$BMs$N>pJs$r3JG<$9$k$?$a$N9=B$BN!#
\e(B
470 \e$B$3$N9=B$BN$r;2>H$9$k$K$O
\e(B <code>mime-content-type-
\e$BMWAGL>
\e(B</code>
\e$B$H$$$&L>
\e(B
471 \e$BA0$N;2>H4X?t$rMQ$$$k!#
\e(B
473 \e$B$3$N9=B$BN$NMWAG$O0J2<$NDL$j$G$"$k!'
\e(B
476 <dt>primary-type<dd>media-type
\e$B$N<g7?
\e(B (symbol).
478 <dt>subtype<dd>media-type
\e$B$NI{7?
\e(B (symbol).
480 <dt>parameters<dd>Content-Type
\e$BMs$N
\e(B parameter (
\e$BO"A[
\e(B list).
485 <defun name="make-mime-content-type">
488 <p>content-type
\e$B$N@8@.;R!#
\e(B
491 <defun name="mime-content-type-parameter">
492 <args> content-type parameter
494 <var>content-type</var>
\e$B$N
\e(B <var>parameter</var>
\e$B$NCM$rJV$9!#
\e(B
499 <node> Content-Type parser
501 <defun name="mime-parse-Content-Type">
504 <var>string</var>
\e$B$r
\e(B content-type
\e$B$H$7$F2r@O$7$?7k2L$rJV$9!#
\e(B
507 <defun name="mime-read-Content-Type">
509 \e$B8=:_$N
\e(B buffer
\e$B$N
\e(B Content-Type
\e$BMs$rFI$_<h$j!"2r@O$7$?7k2L$rJV$9!#
\e(B
511 Content-Type
\e$BMs$,B8:_$7$J$$>l9g$O
\e(B nil
\e$B$rJV$9!#
\e(B
515 <h2> Utility functions
516 <node> Content-Type utility
518 <defun name="mime-type/subtype-string">
519 <args> type <opts> subtype
521 Return type/subtype string from <var>type</var> and
526 <h1> Information of Content-Disposition field
527 <node> Content-Disposition
529 <concept>Content-Disposition
\e$BMs
\e(B</concept>
\e$B$O
\e(B entity
\e$B$NI=<($d
\e(B file
\e$BL>$J$I
\e(B
530 \e$B$NB0@-$K$J$I$K4X$9$k>pJs$r5-=R$9$k$?$a$N$b$N$G$9!#
\e(B
532 <rfc number="2183" type="Standards Track"
533 author="S. Dorner, K. Moore and R. Troost"
534 title="Communicating Presentation Information in
535 Internet Messages: The Content-Disposition Header"
538 FLIM
\e$B$O
\e(B Content-Disposition
\e$BMs$r9=J82r@O$9$k4X?t$H
\e(B Content-Disposition
539 \e$BMs$N2r@O7k2L$r3JG<$9$k9=B$BN
\e(B
540 <concept>mime-content-disposition</concept>
\e$B$rDs6!$7$^$9!#
\e(B
543 <h2> mime-content-disposition structure
544 <node> mime-content-disposition
546 <define type="Structure" name="mime-content-disposition">
548 Content-Disposition
\e$BMs$N2r@O7k2L$r<}$a$k$?$a$N9=B$BN!#
\e(B
550 \e$B$3$N9=B$BN$r;2>H$9$k$K$O
\e(B <code>mime-content-disposition-
\e$BMWAGL>
\e(B</code>
\e$B$H
\e(B
551 \e$B$$$&L>A0$N;2>H4X?t$rMQ$$$k!#
\e(B
553 \e$B$3$N9=B$BN$NMWAG$O0J2<$NDL$j$G$"$k!'
\e(B
556 <dt>disposition-type<dd>disposition-type (symbol).
558 <dt>parameters<dd>Content-Disposition
\e$BMs$N
\e(B parameter (
\e$BO"A[
\e(B list).
563 <defun name="mime-content-disposition-parameter">
564 <args> content-disposition parameter
566 <var>content-disposition</var>
\e$B$N
\e(B <var>parameter</var>
\e$B$NCM$rJV$9!#
\e(B
569 <defun name="mime-content-disposition-filename">
570 <args> content-disposition
572 <var>content-disposition</var>
\e$B$N
\e(B filename
\e$B$NCM$rJV$9!#
\e(B
576 <h2> Parser for Content-Disposition field
577 <node> Content-Disposition parser
579 <defun name="mime-parse-Content-Disposition">
582 <var>string</var>
\e$B$r
\e(B content-disposition
\e$B$H$7$F2r@O$7$?7k2L$rJV$9!#
\e(B
585 <defun name="mime-read-Content-Disposition">
587 \e$B8=:_$N
\e(B buffer
\e$B$N
\e(B Content-Disposition
\e$BMs$rFI$_<h$j!"2r@O$7$?7k2L$rJV$9!#
\e(B
589 Content-Disposition
\e$BMs$,B8:_$7$J$$>l9g$O
\e(B nil
\e$B$rJV$9!#
\e(B
594 <node> Content-Transfer-Encoding
596 <concept>Content-Transfer-Encoding
\e$BMs
\e(B</concept>
\e$B$O
\e(B entity
\e$B$NId9f2=K!$r5-
\e(B
597 \e$B=R$9$k$?$a$N$b$N$G$9!#
\e(B
599 FLIM
\e$B$G$O
\e(B Content-Transfer-Encoding
\e$BMs$r9=J82r@O$9$k4X?t$rDs6!$7$^$9!#$3
\e(B
600 \e$B$l$i$N4X?t$O
\e(B Content-Transfer-Encoding
\e$BMs$N>pJs$OJ8;zNs$GI=8=$7$^$9!#
\e(B
602 \e$B$^$?!"
\e(BContent-Transfer-Encoding
\e$B$K4p$E$$$FId9f2=!&I|9f2=$r9T$&4X?t$bDs
\e(B
607 <node> Content-Transfer-Encoding parser
609 <defun name="mime-parse-Content-Transfer-Encoding">
612 <var>string</var>
\e$B$r
\e(B content-transfer-encoding
\e$B$H$7$F2r@O$7$?7k2L$rJV$9!#
\e(B
615 <defun name="mime-read-Content-Transfer-Encoding">
616 <opts>default-encoding
618 \e$B8=:_$N
\e(B buffer
\e$B$N
\e(B Content-Transfer-Encoding
\e$BMs$rFI$_<h$j!"2r@O$7$?7k2L$r
\e(B
621 Content-Transfer-Encoding
\e$BMs$,B8:_$7$J$$>l9g$O
\e(B
622 <var>default-encoding</var>
\e$B$rJV$9!#
\e(B
626 <h2> Region encoding/decoding
627 <node> Region encoder/decoder
629 <defun name="mime-encode-region">
630 <args> start end encoding
632 Encode region <var>start</var> to <var>end</var> of current buffer
633 using <var>encoding</var>.
636 <defun name="mime-decode-region">
637 <args> start end encoding
639 Decode region <var>start</var> to <var>end</var> of current buffer
640 using <var>encoding</var>.
643 <defvar name="mime-encoding-method-alist">
645 Alist of encoding vs. corresponding method to encode region.
647 Each element looks like <code>(STRING . FUNCTION)</code> or
648 <code>(STRING . nil)</code>. <var>string</var> is
649 content-transfer-encoding. <code>function</code> is region encoder
650 and <code>nil</code> means not to encode.
653 <defvar name="mime-decoding-method-alist">
655 Alist of encoding vs. corresponding method to decode region.
657 Each element looks like <code>(STRING . FUNCTION)</code> or
658 <code>(STRING . nil)</code>. <var>string</var> is
659 content-transfer-encoding. <code>function</code> is region decoder
660 and <code>nil</code> means not to decode.
664 <h2> String encoding/decoding
665 <node> String encoder/decoder
667 <defun name="mime-decode-string">
668 <args> string encoding
670 <var>string</var>
\e$B$r
\e(B <var>encoding</var>
\e$B$H$7$FI|9f$7$?7k2L$rJV$7$^$9!#
\e(B
673 <defvar name="mime-string-decoding-method-alist">
675 Alist of encoding vs. corresponding method to decode string.
677 Each element looks like <code>(STRING . FUNCTION)</code>.
678 STRING is content-transfer-encoding.
679 FUNCTION is string decoder.
683 <h2> File encoding/decoding
684 <node> File encoder/decoder
686 <defun name="mime-insert-encoded-file">
687 <args> filename encoding
689 Insert file <var>FILENAME</var> encoded by <var>ENCODING</var> format.
692 <defun name="mime-write-decoded-region">
693 <args> start end filename encoding
695 Decode and write current region encoded by <var>encoding</var> into
698 <var>start</var> and <var>end</var> are buffer positions.
701 <defvar name="mime-file-encoding-method-alist">
703 Alist of encoding vs. corresponding method to insert encoded file.
705 Each element looks like <code>(STRING . FUNCTION)</code>. STRING is
706 content-transfer-encoding. FUNCTION is function to insert encoded
710 <defvar name="mime-file-decoding-method-alist">
712 Alist of encoding vs. corresponding method to write decoded region to
715 Each element looks like <code>(STRING . FUNCTION)</code>. STRING is
716 content-transfer-encoding. FUNCTION is function to write decoded
721 <h1> Network representation of header
724 encoded-word
\e$B$O
\e(B header
\e$B$GHs
\e(B <dref>ASCII</dref>
\e$BJ8;z$rI=8=$9$k$?$a$N7A
\e(B
725 \e$B<0$G!"
\e(B<concept>RFC 2047</concept>
\e$B$GDj5A$5$l$F$$$^$9!#
\e(B
727 <rfc number="2047" type="Standards Track" author="K. Moore"
728 title="MIME (Multipurpose Internet Mail Extensions) Part
729 Three: Message Header Extensions for Non-ASCII Text"
730 date="November 1996" obsolete="1521,1522,1590">
732 \e$B$^$?!"9T57$N0-$$$3$H$@$H8@$($^$9$,!"
\e(Bencoded-word
\e$B$rMQ$$$:$KHs
\e(B
733 <dref>ASCII</dref>
\e$BJ8;z$r
\e(B header
\e$B$KF~$l$?5-;v$bB8:_$7$^$9!#
\e(B
735 FLIM
\e$B$O$3$l$i$rId9f2=!&I|9f2=$9$k5!G=$rDs6!$7$^$9!#
\e(B
738 <h2> Header encoding/decoding
739 <node> Header encoder/decoder
741 <defun name="eword-encode-header">
742 <opts> code-conversion separator
744 Decode MIME encoded-words in header fields.
746 If <var>code-conversion</var> is <code>nil</code>, it decodes only
747 encoded-words. If it is mime-charset, it decodes non-ASCII bit
748 patterns as the mime-charset. Otherwise it decodes non-ASCII bit
749 patterns as the default-mime-charset.
751 If <var>separator</var> is not nil, it is used as header separator.
754 <defun name="eword-encode-header">
755 <opts> code-conversion
757 Encode header fields to network representation, such as MIME
760 It refer variable <code>eword-field-encoding-method-alist</code>.
764 <h1> Various Customization
767 <define type="group" name="mime">
769 MIME
\e$B4XO"5!G=$K4X$9$k
\e(B group.
771 <code>mail</code>
\e$B$H
\e(B <code>news</code>
\e$B$KB0$9$k!#
\e(B
774 <defvar name="default-mime-charset">
776 \e$BE,@Z$J
\e(B <dref>MIME charset</dref>
\e$B$,8+$D$+$i$J$+$C$?>l9g$KMQ$$$i$l$k
\e(B
779 \e$BK\Mh$O
\e(B APEL
\e$B$NJQ?t$G$"$k!#
\e(B
782 <defvar name="mime-temp-directory">
784 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.
786 \e$B4D6-JQ?t
\e(B <code>MIME_TMP_DIR</code>, <code>TM_TMP_DIR</code>,
787 <code>TMPDIR</code>, <code>TMP</code>
\e$B$b$7$/$O
\e(B <code>TEMP</code>
\e$B$,@_Dj
\e(B
788 \e$B$5$l$F$$$?>l9g!"$=$l$r=i4|CM$H$7$FMQ$$$k!#2?$b@_Dj$5$l$F$$$J$$>l9g!"
\e(B
789 <code>"/tmp/"</code>
\e$B$rMQ$$$k!#
\e(B
802 <concept>7bit</concept> means any integer between 0 .. 127.
804 Any data represented by 7bit integers is called <concept>7bit
807 Textual string consisted of Control characters between 0 .. 31 and
808 127, and space represented by 32, and graphic characters between 33
809 .. 236 are called <concept>7bit (textual) string</concept>.
811 Conventional Internet <a node="MTA">MTA</a> can translate 7bit data,
812 so it is no need to translate by <a
813 node="Quoted-Printable">Quoted-Printable</a> or <a
814 node="Base64">Base64</a> for 7bit data.
816 However if there are too long lines, it can not translate by 7bit MTA
817 even if it is 7bit data. <dref>RFC 821</dref> and <dref>RFC
818 2045</dref> require lines in 7bit data must be less than 998 bytes.
819 So if a ``7bit data'' has a line more than 999 bytes, it is regarded
820 as <dref>binary</dref>. For example, Postscript file should be
821 encoded by Quoted-Printable.
827 <concept>8bit</concept> means any integer between 0 .. 255.
829 Any data represented by 8bit integers is called <concept>8bit
832 Textual string consisted of Control characters between 0 .. 31, 127,
833 and 128 .. 159, and space represented by 32, and graphic characters
834 between 33 .. 236 and 160 .. 255 are called <concept>8bit (textual)
837 For example, <dref>iso-8859-1</dref> or <dref>euc-kr</dref> are
838 coded-character-set represented by 8bit textual string.
840 Traditional Internet <a node="MTA">MTA</a> can translate only
841 <dref>7bit</dref> data, so if a 8bit data will be translated such MTA,
842 it must be encoded by <dref>Quoted-Printable</dref> or
845 However 8bit MTA are increasing today.
847 However if there are too long lines, it can not translate by 8bit MTA
848 even if it is 8bit data. <dref>RFC 2045</dref> require lines in 8bit
849 data must be less than 998 bytes. So if a ``8bit data'' has a line
850 more than 999 bytes, it is regarded as <dref>binary</dref>, so it must
851 be encoded by Base64 or Quoted-Printable.
857 <concept>ASCII</concept> is a 94-character set contains primary latin
858 characters (A-Z, a-z), numbers and some characters. It is a standard
859 of the United States of America. It is a variant of <a node="ISO
862 <standard abbrev="ASCII" title-en="Coded Character Set -- 7-Bit
863 American Standard Code for Information Interchange"
864 number="ANSI X3.4" year="1986">
870 <concept>Base64</concept> is a transfer encoding method of
871 <dref>MIME</dref> defined in <dref>RFC 2045</dref>.
873 The encoding process represents 24-bit groups of input bits as output
874 strings of 4 encoded characters. Encoded characters represent integer
875 0 .. 63 or <concept>pad</concept>. Base64 data must be 4 * n bytes,
876 so pad is used to adjust size.
878 These 65 characters are subset of all versions of ISO 646, including
879 US-ASCII, and all versions of EBCDIC. So it is safe even if it is
880 translated by non-Internet gateways.
886 Any byte stream is called <concept>binary</concept>.
888 It does not require structureof lines. It differs from from <a
889 node="8bit">8bit</a>.
891 In addition, if line structured data contain too long line (more than
892 998 bytes), it is regarded as binary.
895 <h3> Coded character set, Character code
896 <node> coded character set
898 A set of unambiguous rules that establishes a character set and the
899 one-to-one relationship between the characters of the set and their
906 <concept>media-type</concept> specifies the nature of the data in the
907 body of <dref>MIME</dref> <dref>entity</dref>. It consists of
908 <concept>type</concept> and <concept>subtype</concept>. It is defined
909 in <dref>RFC 2046</dref>.
911 Currently there are following standard primary-types:
914 <li><concept>text</concept>
916 <li><concept>image</concept>
918 <li><concept>audio</concept>
920 <li><concept>video</concept>
922 <li><concept>application</concept>
924 <li><a node="multipart"><concept>multipart</concept></a>
926 <li><concept>message</concept>
930 And there are various subtypes, for example, application/octet-stream,
931 audio/basic, image/jpeg, <dref>multipart/mixed</dref>,
932 <dref>text/plain</dref>, video/mpeg...
935 You can refer registered media types at <a
936 href="ftp://ftp.isi.edu/in-notes/iana/assignments/media-types">MEDIA
939 In addition, you can use private type or subtype using
940 <concept>x-token</concept>, which as the prefix `x-'. However you can
941 not use them in public.
943 <cf node="Content-Type field">
949 In this document, it means mail defined in <dref>RFC 822</dref> and
950 news message defined in <dref>RFC 1036</dref>.
956 MIME stands for <concept>Multipurpose Internet Mail
957 Extensions</concept>, it is an extension for <dref>RFC 822</dref>.
959 According to RFC 2045:
961 STD 11, RFC 822, defines a message representation protocol specifying
962 considerable detail about US-ASCII message headers, and leaves the
963 message content, or message body, as flat US-ASCII text. This set of
964 documents, collectively called the Multipurpose Internet Mail
965 Extensions, or MIME, redefines the format of messages to allow for
968 <li>textual message bodies in character sets other than US-ASCII,
970 <li>an extensible set of different formats for non-textual message
973 <li>multi-part message bodies, and
975 <li>textual header information in character sets other than US-ASCII.
979 It is defined in <dref>RFC 2045</dref>, <dref>RFC 2046</dref>, <a
980 node="encoded-word">RFC 2047</a>, <dref>RFC 2048</dref> and <dref>RFC
987 <a node="coded character set">Coded character set</a> used in
988 <dref>Content-Type field</dref> or charset parameter of <a
989 node="encoded-word">encoded-word</a>.
991 It is defined in <dref>RFC 2045</dref>.
993 <dref>iso-2022-jp</dref> or <dref>euc-kr</dref> are kinds of it. (In
994 this document, MIME charsets are written by small letters to
995 distinguish <dref>graphic character set</dref>. For example, ISO
996 8859-1 is a graphic character set, and iso-8859-1 is a MIME charset)
1002 <concept>Message Transfer Agent</concept>. It means mail transfer
1003 programs (ex. sendmail) and news servers.
1011 <concept>Message User Agent</concept>. It means mail readers and news
1017 <h3> Quoted-Printable
1018 <node> Quoted-Printable
1020 <concept>Quoted-Printable</concept> is a transfer encoding method of
1021 <dref>MIME</dref> defined in <dref>RFC 2045</dref>.
1023 If the data being encoded are mostly US-ASCII text, the encoded form
1024 of the data remains largely recognizable by humans.
1032 A RFC defines format of Internet mail message, mainly <concept>message
1037 news message is based on RFC 822, so <concept>Internet
1038 message</concept> may be more suitable than <concept>Internet
1042 <rfc number="822" type="STD 11" author="D. Crocker" title="Standard
1043 for the Format of ARPA Internet Text Messages"
1050 A RFC defines format of USENET message. It is a subset of <dref>RFC
1051 822</dref>. It is not Internet standard, but a lot of netnews
1052 excepting Usenet uses it.
1054 <rfc name="USENET" number="1036" author="M. Horton and R. Adams"
1055 title="Standard for Interchange of USENET Messages"
1056 date="December 1987" obsolete="850">
1062 <rfc number="2045" type="Standards Track" author="N. Freed and
1063 N. Borenstein" title="Multipurpose Internet Mail
1064 Extensions (MIME) Part One: Format of Internet Message
1065 Bodies" date="November 1996" obsolete="1521, 1522,
1072 <rfc number="2046" type="Standards Track" author="N. Freed and
1073 N. Borenstein" title="Multipurpose Internet Mail
1074 Extensions (MIME) Part Two: Media Types"
1075 date="November 1996" obsolete="1521, 1522, 1590">
1081 <rfc number="2048" type="Standards Track" author="N. Freed, J. Klensin
1082 and J. Postel" title="Multipurpose Internet Mail
1083 Extensions (MIME) Part Four: Registration Procedures"
1084 date="November 1996" obsolete="1521, 1522, 1590">
1090 <rfc number="2049" type="Standards Track" author="N. Freed and
1091 N. Borenstein" title="Multipurpose Internet Mail
1092 Extensions (MIME) Part Five: Conformance Criteria and
1093 Examples" date="November 1996" obsolete="1521, 1522,
1100 A textual data represented by only <dref>coded character set</dref>.
1101 It does not have information about font or typesetting.
1102 <cf node="text/plain">
1108 A <a node="MIME charset">MIME charset</a> for primary Latin script
1109 mainly written by English or other languages.
1111 It is a 7bit <dref>coded character set</dref> based on <dref>ISO
1112 2022</dref>, it contains only
1113 <dref>ASCII</dref> and <dref>code extension</dref> is not allowed.
1115 It is standard coded character set of Internet mail. If MIME charset
1116 is not specified, <concept>us-ascii</concept> is used as default.
1118 In addition, <concept>ASCII</concept> of <dref>RFC 822</dref> should
1119 be interpreted as us-ascii.
1122 <h2> How to report bugs
1125 If you write bug-reports and/or suggestions for improvement, please
1126 send them to the tm Mailing List:
1129 <li> Japanese <mail>bug-tm-ja@chamonix.jaist.ac.jp</mail>
1130 <li> English <mail>bug-tm-en@chamonix.jaist.ac.jp</mail>
1134 Notice that, we do not welcome bug reports about too old version.
1135 Bugs in old version might be fixed. So please try latest version at
1138 You should write <concept>good bug report</concept>. If you write
1139 only ``FLIM does not work'', we can not find such situations. At
1140 least, you should write name, type, variants and version of OS, emacs,
1141 APEL, FLIM, SEMI and MUA, and setting. In addition, if error occurs,
1142 to send backtrace is very important. <cf file="emacs" node="Bugs">
1144 Bug may not appear only your environment, but also in a lot of
1145 environment (otherwise it might not bug). Therefor if you send mail
1146 to author directly, we must write a lot of mails. So please send mail
1147 to address for tm bugs instead of author.
1150 Via the tm ML, you can report FLIM bugs, obtain the latest release of
1151 FLIM, and discuss future enhancements to FLIM. To join the tm ML,
1152 send empty e-mail to:
1155 <li> Japanese <mail>tm-ja-help@chamonix.jaist.ac.jp</mail>
1156 <li> English <mail>tm-en-help@chamonix.jaist.ac.jp</mail>
1160 <h2> CVS based development
1163 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
1164 \e$B?7$N
\e(B FLIM
\e$B$rF~<j$9$k$3$H$,$G$-$^$9!'
\e(B
1169 % cvs -d :pserver:anonymous@chamonix.jaist.ac.jp:/hare/cvs/root \
1172 CVS password: [CR] # NULL string
1176 % cvs -d :pserver:anonymous@chamonix.jaist.ac.jp:/hare/cvs/root \
1177 checkout [-r TAG] flim
1181 CVS
\e$B$rMQ$$$?3+H/$K;22C$7$?$$J}$O
\e(B
1184 <li> <mail>cvs@chamonix.jaist.ac.jp</mail>
1188 \e$B$^$G!"
\e(Baccount
\e$BL>$H
\e(B UNIX
\e$B$N
\e(B passwd
\e$B$HF1$87A<0$N
\e(B crypt
\e$B2=$5$l$?
\e(B password
1189 \e$B$r1h$($F8fO"Mm$/$@$5$$!#
\e(B
1192 <h2> History of FLIM
1195 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>
1196 \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
1197 B-encoding
\e$B@lMQ$N
\e(B encoded-word
\e$B$NI|9f2=%W%m%0%i%`$G$7$?!#
\e(B
1199 \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
1200 <file>tiny-mime.el</file>
\e$B$H$$$&%W%m%0%i%`$r=q$-$^$9!#$3$l$O!"
\e(BNemacs
1201 \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
1202 <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
1203 support
\e$B$7!"$^$?!"
\e(BMULE
\e$B$G07$&$3$H$,$G$-$k$5$^$6$^$J
\e(B <dref>MIME
1204 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
1205 \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
1206 \e$B$a$i$l$^$9!#
\e(B
1208 \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
1209 \e$B$?$a$N@_Dj=8$bG[I[$7$F$$$^$7$?$,!"$=$l$i$O8e$K
\e(B
1210 <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
1211 \e$B$&L>A0$GG[I[$5$l$^$9!#
\e(B
1213 \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
1214 <file>tm-body.el</file>
\e$B$r=q$-$^$9!#$3$l$O!"$9$0$K
\e(B
1215 <file>tm-view.el</file>
\e$B$H$$$&L>A0$KJQ$o$j$^$7$?$,!"$d$,$F!"$3$l$,
\e(B
1216 <file>tiny-mime.el</file>
\e$B$KBe$o$C$F!"
\e(Btm
\e$B$NCf3K$H$J$j$^$9!#
\e(B
1218 <file>tm-view.el</file>
\e$B$OEvA3!"
\e(BContent-Transfer-Encoding
\e$B$r07$&I,MW$,
\e(B
1219 \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
1220 \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
1221 Quoted-Printable
\e$B$N
\e(B code
\e$B$,DI2C$5$l$^$7$?!#$3$l$i$,
\e(B
1222 <file>mel-b.el</file>
\e$B$H
\e(B <file>mel-q.el</file>
\e$B$K$J$j$^$7$?!#
\e(B
1224 \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
1225 \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
1226 <file>mel-g.el</file>
\e$B$,DI2C$5$l$^$7$?!#
\e(B
1228 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
1229 \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
1230 <file>std11.el</file>
\e$B$KEv$?$j$^$9!#$^$?!"$3$N2aDx$G
\e(B
1231 <file>tiny-mime.el</file>
\e$B$OI|9f2=$r9T$&
\e(B <file>tm-ew-d.el</file>
\e$B$HId
\e(B
1232 \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
1233 <file>eword-decode.el</file>
\e$B$H
\e(B <file>eword-encode.el</file>
\e$B$N@hAD$K
\e(B
1234 \e$BEv$?$j$^$9!#
\e(B
1236 \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
1237 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
1238 \e$B$3$N$&$A$N
\e(B MEL
\e$B$,
\e(B FLIM
\e$B$ND>@\$N@hAD$KEv$?$j$^$9!#
\e(B
1240 \e$B8e$K!"
\e(BAPEL
\e$B$+$i
\e(B <file>std11.el</file>
\e$B$,0\$5$l!"$^$?!"
\e(B
1241 <file>mailcap.el</file>, <file>eword-decode.el</file>
\e$B$*$h$S
\e(B
1242 <file>eword-encode.el</file>
\e$B$,
\e(B SEMI
\e$B$+$i0\$5$l!"
\e(Bpackage
\e$B$NL>A0$,
\e(B FLIM
1243 \e$B$H$J$j$^$9!#
\e(B
1245 \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
1246 FLIM
\e$B$N;^$G$"$k
\e(B ``FLIM-FLAM''
\e$B$H$J$C$F$$$^$9!#
\e(B
1250 <node> Concept Index
1256 <node> Function Index
1262 <node> Variable Index