1 <!doctype sinfo system>
3 <title>FLIM 1.9 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-buffer">
104 Parse <var>buffer</var> as message, and set the result to buffer local
105 variable <code>mime-message-structure</code> of <var>buffer</var> as
108 If <var>buffer</var> is omitted, current buffer is used.
110 <var>type</var> is representation-type of created mime-entity. <cf
111 node="mm-backend"> Default value is <var>buffer</var>.
115 <h2> Features about message tree
116 <node> Entity hierarchy
118 <defvar name="mime-message-structure">
120 Buffer local variable to store mime-entity structure of message.
123 <defun name="mime-entity-children">
126 Return list of entities included in the <var>entity</var>.
129 <defun name="mime-entity-parent">
130 <args> entity <opts> message
132 Return parent entity of the <var>entity</var>.
134 If <var>message</var> is specified, it is regarded as root instead of
135 <code>mime-message-structure</code>.
138 <defun name="mime-root-entity-p">
141 Return non-<code>nil</code> if <var>entity</var> is root entity
145 <defun name="mime-entity-node-id">
148 Return node-id of <var>entity</var>.
151 <defun name="mime-entity-number">
154 Return entity-number of <var>entity</var>.
157 <defun name="mime-find-entity-from-number">
158 <args> entity-number <opts> message
160 Return entity from <var>entity-number</var> in <var>message</var>.
162 If <var>message</var> is not specified,
163 <code>mime-message-structure</code> is used.
166 <defun name="mime-find-entity-from-node-id">
167 <args> entity-node-id <opts> message
169 Return entity from <var>entity-node-id</var> in <var>message</var>.
171 If <var>message</var> is not specified,
172 <code>mime-message-structure</code> is used.
176 <h2> Functions about attributes of mime-entity
177 <node> Entity Attributes
179 <defun name="mime-entity-content-type">
182 Return content-type of <var>entity</var>.
183 <cf node="mime-content-type">
186 <defun name="mime-entity-content-disposition">
189 Return content-disposition of <var>entity</var>. <cf
190 node="mime-content-disposition">
193 <defun name="mime-entity-filename">
196 Return file name of <var>entity</var>.
199 <defun name="mime-entity-encoding">
200 <args> entity <opts> default-encoding
202 Return content-transfer-encoding of <var>entity</var>.
203 <cf node="Content-Transfer-Encoding">
205 If the <var>entity</var> does not have Content-Transfer-Encoding
206 field, this function returns <var>default-encoding</var>. If it is
207 nil, <code>"7bit"</code> is used as default value.
210 <defun name="mime-entity-cooked-p">
213 Return non-nil if contents of <var>entity</var> has been already
218 <h2> Information of entity header
221 <defun name="mime-fetch-field">
222 <args> field-name <opts> entity
224 Return field-body of <var>field-name</var> field in header of
227 The results is network representation.
229 If <var>entity</var> is omitted, <code>mime-message-structure</code>
230 is used as default value.
232 If <var>field-name</var> field is not found, this function returns
236 <defun name="mime-read-field">
237 <args> field-name <opts> entity
239 Parse <var>field-name</var> field in header of <var>entity</var>, and
242 Format of result is depended on kind of field. For non-structured
243 field, this function returns string. For structured field, it returns
244 list corresponding with structure of the field.
246 Strings in the result will be converted to internal representation of
249 If <var>entity</var> is omitted, <code>mime-message-structure</code>
250 is used as default value.
252 If <var>field-name</var> field is not found, this function returns
256 <defun name="mime-insert-decoded-header">
257 <args> entity <opts> invisible-fields visible-fields
259 Insert before point a decoded contents of header of <var>entity</var>.
261 <var>invisible-fields</var> is list of regexps to match field-name to
262 hide. <var>visible-fields</var> is list of regexps to match
265 If a field-name is matched with some elements of
266 <var>invisible-fields</var> and matched with none of
267 <var>visible-fields</var>, this function don't insert the field.
271 <h2> Contents of Entity
272 <node> Entity-content
274 <defun name="mime-entity-content">
277 Return content of <var>entity</var> as byte sequence.
280 <defun name="mime-write-entity-content">
281 <args> entity filename
283 Write content of <var>entity</var> into <var>filename</var>.
286 <defun name="mime-write-entity">
287 <args> entity filename
289 Write representation of <var>entity</var> into <var>filename</var>.
292 <defun name="mime-write-entity-body">
293 <args> entity filename
295 Write body of <var>entity</var> into <var>filename</var>.
299 <h2> Entity as buffer representation
302 <defun name="mime-entity-buffer">
305 Return buffer, which contains <var>entity</var>.
308 <defun name="mime-entity-point-min">
311 Return the start point of <var>entity</var> in the buffer which
312 contains <var>entity</var>.
315 <defun name="mime-entity-point-max">
318 Return the end point of <var>entity</var> in the buffer which
319 contains <var>entity</var>.
322 <defun name="mime-entity-header-start">
325 Return the start point of header of <var>entity</var> in the buffer
326 which contains <var>entity</var>.
329 <defun name="mime-entity-header-end">
332 Return the end point of header of <var>entity</var> in the buffer
333 which contains <var>entity</var>.
336 <defun name="mime-entity-body-start">
339 Return the start point of body of <var>entity</var> in the buffer
340 which contains <var>entity</var>.
343 <defun name="mime-entity-body-end">
346 Return the end point of body of <var>entity</var> in the buffer which
347 contains <var>entity</var>.
351 <h2> Entity representations and implementations
354 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
355 \e$B$5$^$6$^$J$b$N$,MxMQ$G$-$k$h$&$K@_7W$5$l$F$$$^$9!#
\e(B
357 \e$B$3$3$G!"
\e(Bentity
\e$B$,$I$&$$$&<oN`$NI=8=$r9T$C$F$$$k$+$r<($9$N$,
\e(B
358 <concept>representation-type</concept>
\e$B$G!"
\e(Bentity
\e$B$r@8@.$9$k;~$K$O$3$l$r
\e(B
359 \e$B;XDj$7$^$9!#
\e(B<cf node="Entity Creation">
361 \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
362 \e$BMj$9$k$3$H$K$h$C$F<B8=$5$l$F$$$^$9!#
\e(BEntity
\e$B$O<+J,$N
\e(B
363 representation-type
\e$B$rCN$C$F$*$j!"$=$N
\e(B representation-type
\e$B$K1~$8$F<B:]
\e(B
364 \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
365 method</concept>
\e$B$H8F$S$^$9!#$^$?!"
\e(Brepresentation-type
\e$BKh$K$3$N$h$&$J4X
\e(B
366 \e$B?t$r$^$H$a$?$b$N$r
\e(B <concept>mm-backend</concept>
\e$B$H8F$S$^$9!#
\e(B
368 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
369 \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
370 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
371 \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
372 \e$B;~$K<+F0E*$K
\e(B require
\e$B$5$l$^$9!#
\e(B
375 <h3> Message-passing for entity
376 <node> Request for entity
378 <defun name="mime-entity-send">
379 <args> entity message <rest> args
381 <var>entity</var>
\e$B$K
\e(B <var>message</var>
\e$B$rAw$k!#
\e(B
383 <var>args</var>
\e$B$O
\e(B <var>message</var>
\e$B$N0z?t$G$"$k!#
\e(B
387 <h3> How to make mm-backend
388 <node> mm-backend module
390 \e$B!J$9$_$^$;$s!#$=$N$&$A=q$-$^$9
\e(B (^_^;
\e$B!K
\e(B
392 \e$B!J$H$j$"$($:!"
\e(Bmm*.el
\e$B$r;29M$K$7$F$/$@$5$$!K
\e(B
395 <h1> Information of Content-Type field
398 <concept>Content-Type field</concept> is a field to indicate kind of
399 contents or data format, such as <dref>media-type</dref> and MIME
400 charset. It is defined in <dref>RFC 2045</dref>.
404 Historically, Content-Type field was proposed in RFC 1049. In it,
405 Content-Type did not distinguish type and subtype, and there are no
406 mechanism to represent kind of character code like MIME charset.
410 FLIM provides parser for Content-Type field and structure
411 <concept>mime-content-type</concept> to store information of
415 <h2> Format of Content-Type field
416 <node> Content-Type field
418 Content-Type
\e$BMs$N7A<0$O0J2<$N$h$&$KDj5A$5$l$F$$$^$9!'
\e(B
421 ``Content-Type'' ``:'' <concept>type</concept> ``/''
422 <concept>subtype</concept> *( ``;'' <concept>parameter</concept> )
429 Content-Type: image/jpeg
438 Content-Type: text/plain; charset=iso-2022-jp
443 \e$B$J$I$N$h$&$KMQ$$$i$l$^$9!#
\e(B
445 \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
446 \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
447 `text/plain'
\e$B$O
\e(B media-type
\e$B$N#1$D$G$9!#
\e(B
451 Content-Type
\e$BMs$N$J$$
\e(B entity
\e$B$O
\e(B
455 Content-Type: text/plain; charset=us-ascii
460 \e$B$H$7$F2r<a$5$l$k!#
\e(B<cf node="us-ascii">
464 <h2> mime-content-type structure
465 <node> mime-content-type
467 <define type="Structure" name="mime-content-type">
469 Content-Type
\e$BMs$N>pJs$r3JG<$9$k$?$a$N9=B$BN!#
\e(B
471 \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
472 \e$BA0$N;2>H4X?t$rMQ$$$k!#
\e(B
474 \e$B$3$N9=B$BN$NMWAG$O0J2<$NDL$j$G$"$k!'
\e(B
477 <dt>primary-type<dd>media-type
\e$B$N<g7?
\e(B (symbol).
479 <dt>subtype<dd>media-type
\e$B$NI{7?
\e(B (symbol).
481 <dt>parameters<dd>Content-Type
\e$BMs$N
\e(B parameter (
\e$BO"A[
\e(B list).
486 <defun name="make-mime-content-type">
489 <p>content-type
\e$B$N@8@.;R!#
\e(B
492 <defun name="mime-content-type-parameter">
493 <args> content-type parameter
495 <var>content-type</var>
\e$B$N
\e(B <var>parameter</var>
\e$B$NCM$rJV$9!#
\e(B
500 <node> Content-Type parser
502 <defun name="mime-parse-Content-Type">
505 <var>string</var>
\e$B$r
\e(B content-type
\e$B$H$7$F2r@O$7$?7k2L$rJV$9!#
\e(B
508 <defun name="mime-read-Content-Type">
510 \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
512 Content-Type
\e$BMs$,B8:_$7$J$$>l9g$O
\e(B nil
\e$B$rJV$9!#
\e(B
516 <h2> Utility functions
517 <node> Content-Type utility
519 <defun name="mime-type/subtype-string">
520 <args> type <opts> subtype
522 Return type/subtype string from <var>type</var> and
527 <h1> Information of Content-Disposition field
528 <node> Content-Disposition
530 <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
531 \e$B$NB0@-$K$J$I$K4X$9$k>pJs$r5-=R$9$k$?$a$N$b$N$G$9!#
\e(B
533 <rfc number="2183" type="Standards Track"
534 author="S. Dorner, K. Moore and R. Troost"
535 title="Communicating Presentation Information in
536 Internet Messages: The Content-Disposition Header"
539 FLIM
\e$B$O
\e(B Content-Disposition
\e$BMs$r9=J82r@O$9$k4X?t$H
\e(B Content-Disposition
540 \e$BMs$N2r@O7k2L$r3JG<$9$k9=B$BN
\e(B
541 <concept>mime-content-disposition</concept>
\e$B$rDs6!$7$^$9!#
\e(B
544 <h2> mime-content-disposition structure
545 <node> mime-content-disposition
547 <define type="Structure" name="mime-content-disposition">
549 Content-Disposition
\e$BMs$N2r@O7k2L$r<}$a$k$?$a$N9=B$BN!#
\e(B
551 \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
552 \e$B$$$&L>A0$N;2>H4X?t$rMQ$$$k!#
\e(B
554 \e$B$3$N9=B$BN$NMWAG$O0J2<$NDL$j$G$"$k!'
\e(B
557 <dt>disposition-type<dd>disposition-type (symbol).
559 <dt>parameters<dd>Content-Disposition
\e$BMs$N
\e(B parameter (
\e$BO"A[
\e(B list).
564 <defun name="mime-content-disposition-parameter">
565 <args> content-disposition parameter
567 <var>content-disposition</var>
\e$B$N
\e(B <var>parameter</var>
\e$B$NCM$rJV$9!#
\e(B
570 <defun name="mime-content-disposition-filename">
571 <args> content-disposition
573 <var>content-disposition</var>
\e$B$N
\e(B filename
\e$B$NCM$rJV$9!#
\e(B
577 <h2> Parser for Content-Disposition field
578 <node> Content-Disposition parser
580 <defun name="mime-parse-Content-Disposition">
583 <var>string</var>
\e$B$r
\e(B content-disposition
\e$B$H$7$F2r@O$7$?7k2L$rJV$9!#
\e(B
586 <defun name="mime-read-Content-Disposition">
588 \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
590 Content-Disposition
\e$BMs$,B8:_$7$J$$>l9g$O
\e(B nil
\e$B$rJV$9!#
\e(B
595 <node> Content-Transfer-Encoding
597 <concept>Content-Transfer-Encoding
\e$BMs
\e(B</concept>
\e$B$O
\e(B entity
\e$B$NId9f2=K!$r5-
\e(B
598 \e$B=R$9$k$?$a$N$b$N$G$9!#
\e(B
600 FLIM
\e$B$G$O
\e(B Content-Transfer-Encoding
\e$BMs$r9=J82r@O$9$k4X?t$rDs6!$7$^$9!#$3
\e(B
601 \e$B$l$i$N4X?t$O
\e(B Content-Transfer-Encoding
\e$BMs$N>pJs$OJ8;zNs$GI=8=$7$^$9!#
\e(B
603 \e$B$^$?!"
\e(BContent-Transfer-Encoding
\e$B$K4p$E$$$FId9f2=!&I|9f2=$r9T$&4X?t$bDs
\e(B
608 <node> Content-Transfer-Encoding parser
610 <defun name="mime-parse-Content-Transfer-Encoding">
613 <var>string</var>
\e$B$r
\e(B content-transfer-encoding
\e$B$H$7$F2r@O$7$?7k2L$rJV$9!#
\e(B
616 <defun name="mime-read-Content-Transfer-Encoding">
617 <opts>default-encoding
619 \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
622 Content-Transfer-Encoding
\e$BMs$,B8:_$7$J$$>l9g$O
\e(B
623 <var>default-encoding</var>
\e$B$rJV$9!#
\e(B
627 <h2> Region encoding/decoding
628 <node> Region encoder/decoder
630 <defun name="mime-encode-region">
631 <args> start end encoding
633 Encode region <var>start</var> to <var>end</var> of current buffer
634 using <var>encoding</var>.
637 <defun name="mime-decode-region">
638 <args> start end encoding
640 Decode region <var>start</var> to <var>end</var> of current buffer
641 using <var>encoding</var>.
644 <defvar name="mime-encoding-method-alist">
646 Alist of encoding vs. corresponding method to encode region.
648 Each element looks like <code>(STRING . FUNCTION)</code> or
649 <code>(STRING . nil)</code>. <var>string</var> is
650 content-transfer-encoding. <code>function</code> is region encoder
651 and <code>nil</code> means not to encode.
654 <defvar name="mime-decoding-method-alist">
656 Alist of encoding vs. corresponding method to decode region.
658 Each element looks like <code>(STRING . FUNCTION)</code> or
659 <code>(STRING . nil)</code>. <var>string</var> is
660 content-transfer-encoding. <code>function</code> is region decoder
661 and <code>nil</code> means not to decode.
665 <h2> String encoding/decoding
666 <node> String encoder/decoder
668 <defun name="mime-decode-string">
669 <args> string encoding
671 <var>string</var>
\e$B$r
\e(B <var>encoding</var>
\e$B$H$7$FI|9f$7$?7k2L$rJV$7$^$9!#
\e(B
674 <defvar name="mime-string-decoding-method-alist">
676 Alist of encoding vs. corresponding method to decode string.
678 Each element looks like <code>(STRING . FUNCTION)</code>.
679 STRING is content-transfer-encoding.
680 FUNCTION is string decoder.
684 <h2> File encoding/decoding
685 <node> File encoder/decoder
687 <defun name="mime-insert-encoded-file">
688 <args> filename encoding
690 Insert file <var>FILENAME</var> encoded by <var>ENCODING</var> format.
693 <defun name="mime-write-decoded-region">
694 <args> start end filename encoding
696 Decode and write current region encoded by <var>encoding</var> into
699 <var>start</var> and <var>end</var> are buffer positions.
702 <defvar name="mime-file-encoding-method-alist">
704 Alist of encoding vs. corresponding method to insert encoded file.
706 Each element looks like <code>(STRING . FUNCTION)</code>. STRING is
707 content-transfer-encoding. FUNCTION is function to insert encoded
711 <defvar name="mime-file-decoding-method-alist">
713 Alist of encoding vs. corresponding method to write decoded region to
716 Each element looks like <code>(STRING . FUNCTION)</code>. STRING is
717 content-transfer-encoding. FUNCTION is function to write decoded
722 <h1> Network representation of header
725 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
726 \e$B<0$G!"
\e(B<concept>RFC 2047</concept>
\e$B$GDj5A$5$l$F$$$^$9!#
\e(B
728 <rfc number="2047" type="Standards Track" author="K. Moore"
729 title="MIME (Multipurpose Internet Mail Extensions) Part
730 Three: Message Header Extensions for Non-ASCII Text"
731 date="November 1996" obsolete="1521,1522,1590">
733 \e$B$^$?!"9T57$N0-$$$3$H$@$H8@$($^$9$,!"
\e(Bencoded-word
\e$B$rMQ$$$:$KHs
\e(B
734 <dref>ASCII</dref>
\e$BJ8;z$r
\e(B header
\e$B$KF~$l$?5-;v$bB8:_$7$^$9!#
\e(B
736 FLIM
\e$B$O$3$l$i$rId9f2=!&I|9f2=$9$k5!G=$rDs6!$7$^$9!#
\e(B
739 <h2> Header encoding/decoding
740 <node> Header encoder/decoder
742 <defun name="eword-encode-header">
743 <opts> code-conversion separator
745 Decode MIME encoded-words in header fields.
747 If <var>code-conversion</var> is <code>nil</code>, it decodes only
748 encoded-words. If it is mime-charset, it decodes non-ASCII bit
749 patterns as the mime-charset. Otherwise it decodes non-ASCII bit
750 patterns as the default-mime-charset.
752 If <var>separator</var> is not nil, it is used as header separator.
755 <defun name="eword-encode-header">
756 <opts> code-conversion
758 Encode header fields to network representation, such as MIME
761 It refer variable <code>eword-field-encoding-method-alist</code>.
765 <h1> Various Customization
768 <define type="group" name="mime">
770 MIME
\e$B4XO"5!G=$K4X$9$k
\e(B group.
772 <code>mail</code>
\e$B$H
\e(B <code>news</code>
\e$B$KB0$9$k!#
\e(B
775 <defvar name="default-mime-charset">
777 \e$BE,@Z$J
\e(B <dref>MIME charset</dref>
\e$B$,8+$D$+$i$J$+$C$?>l9g$KMQ$$$i$l$k
\e(B
780 \e$BK\Mh$O
\e(B APEL
\e$B$NJQ?t$G$"$k!#
\e(B
783 <defvar name="mime-temp-directory">
785 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.
787 \e$B4D6-JQ?t
\e(B <code>MIME_TMP_DIR</code>, <code>TM_TMP_DIR</code>,
788 <code>TMPDIR</code>, <code>TMP</code>
\e$B$b$7$/$O
\e(B <code>TEMP</code>
\e$B$,@_Dj
\e(B
789 \e$B$5$l$F$$$?>l9g!"$=$l$r=i4|CM$H$7$FMQ$$$k!#2?$b@_Dj$5$l$F$$$J$$>l9g!"
\e(B
790 <code>"/tmp/"</code>
\e$B$rMQ$$$k!#
\e(B
803 <concept>7bit</concept> means any integer between 0 .. 127.
805 Any data represented by 7bit integers is called <concept>7bit
808 Textual string consisted of Control characters between 0 .. 31 and
809 127, and space represented by 32, and graphic characters between 33
810 .. 236 are called <concept>7bit (textual) string</concept>.
812 Conventional Internet <a node="MTA">MTA</a> can translate 7bit data,
813 so it is no need to translate by <a
814 node="Quoted-Printable">Quoted-Printable</a> or <a
815 node="Base64">Base64</a> for 7bit data.
817 However if there are too long lines, it can not translate by 7bit MTA
818 even if it is 7bit data. <dref>RFC 821</dref> and <dref>RFC
819 2045</dref> require lines in 7bit data must be less than 998 bytes.
820 So if a ``7bit data'' has a line more than 999 bytes, it is regarded
821 as <dref>binary</dref>. For example, Postscript file should be
822 encoded by Quoted-Printable.
828 <concept>8bit</concept> means any integer between 0 .. 255.
830 Any data represented by 8bit integers is called <concept>8bit
833 Textual string consisted of Control characters between 0 .. 31, 127,
834 and 128 .. 159, and space represented by 32, and graphic characters
835 between 33 .. 236 and 160 .. 255 are called <concept>8bit (textual)
838 For example, <dref>iso-8859-1</dref> or <dref>euc-kr</dref> are
839 coded-character-set represented by 8bit textual string.
841 Traditional Internet <a node="MTA">MTA</a> can translate only
842 <dref>7bit</dref> data, so if a 8bit data will be translated such MTA,
843 it must be encoded by <dref>Quoted-Printable</dref> or
846 However 8bit MTA are increasing today.
848 However if there are too long lines, it can not translate by 8bit MTA
849 even if it is 8bit data. <dref>RFC 2045</dref> require lines in 8bit
850 data must be less than 998 bytes. So if a ``8bit data'' has a line
851 more than 999 bytes, it is regarded as <dref>binary</dref>, so it must
852 be encoded by Base64 or Quoted-Printable.
858 <concept>ASCII</concept> is a 94-character set contains primary latin
859 characters (A-Z, a-z), numbers and some characters. It is a standard
860 of the United States of America. It is a variant of <a node="ISO
863 <standard abbrev="ASCII" title-en="Coded Character Set -- 7-Bit
864 American Standard Code for Information Interchange"
865 number="ANSI X3.4" year="1986">
871 <concept>Base64</concept> is a transfer encoding method of
872 <dref>MIME</dref> defined in <dref>RFC 2045</dref>.
874 The encoding process represents 24-bit groups of input bits as output
875 strings of 4 encoded characters. Encoded characters represent integer
876 0 .. 63 or <concept>pad</concept>. Base64 data must be 4 * n bytes,
877 so pad is used to adjust size.
879 These 65 characters are subset of all versions of ISO 646, including
880 US-ASCII, and all versions of EBCDIC. So it is safe even if it is
881 translated by non-Internet gateways.
887 Any byte stream is called <concept>binary</concept>.
889 It does not require structureof lines. It differs from from <a
890 node="8bit">8bit</a>.
892 In addition, if line structured data contain too long line (more than
893 998 bytes), it is regarded as binary.
896 <h3> Coded character set, Character code
897 <node> coded character set
899 A set of unambiguous rules that establishes a character set and the
900 one-to-one relationship between the characters of the set and their
907 <concept>media-type</concept> specifies the nature of the data in the
908 body of <dref>MIME</dref> <dref>entity</dref>. It consists of
909 <concept>type</concept> and <concept>subtype</concept>. It is defined
910 in <dref>RFC 2046</dref>.
912 Currently there are following standard primary-types:
915 <li><concept>text</concept>
917 <li><concept>image</concept>
919 <li><concept>audio</concept>
921 <li><concept>video</concept>
923 <li><concept>application</concept>
925 <li><a node="multipart"><concept>multipart</concept></a>
927 <li><concept>message</concept>
931 And there are various subtypes, for example, application/octet-stream,
932 audio/basic, image/jpeg, <dref>multipart/mixed</dref>,
933 <dref>text/plain</dref>, video/mpeg...
936 You can refer registered media types at <a
937 href="ftp://ftp.isi.edu/in-notes/iana/assignments/media-types">MEDIA
940 In addition, you can use private type or subtype using
941 <concept>x-token</concept>, which as the prefix `x-'. However you can
942 not use them in public.
944 <cf node="Content-Type field">
950 In this document, it means mail defined in <dref>RFC 822</dref> and
951 news message defined in <dref>RFC 1036</dref>.
957 MIME stands for <concept>Multipurpose Internet Mail
958 Extensions</concept>, it is an extension for <dref>RFC 822</dref>.
960 According to RFC 2045:
962 STD 11, RFC 822, defines a message representation protocol specifying
963 considerable detail about US-ASCII message headers, and leaves the
964 message content, or message body, as flat US-ASCII text. This set of
965 documents, collectively called the Multipurpose Internet Mail
966 Extensions, or MIME, redefines the format of messages to allow for
969 <li>textual message bodies in character sets other than US-ASCII,
971 <li>an extensible set of different formats for non-textual message
974 <li>multi-part message bodies, and
976 <li>textual header information in character sets other than US-ASCII.
980 It is defined in <dref>RFC 2045</dref>, <dref>RFC 2046</dref>, <a
981 node="encoded-word">RFC 2047</a>, <dref>RFC 2048</dref> and <dref>RFC
988 <a node="coded character set">Coded character set</a> used in
989 <dref>Content-Type field</dref> or charset parameter of <a
990 node="encoded-word">encoded-word</a>.
992 It is defined in <dref>RFC 2045</dref>.
994 <dref>iso-2022-jp</dref> or <dref>euc-kr</dref> are kinds of it. (In
995 this document, MIME charsets are written by small letters to
996 distinguish <dref>graphic character set</dref>. For example, ISO
997 8859-1 is a graphic character set, and iso-8859-1 is a MIME charset)
1003 <concept>Message Transfer Agent</concept>. It means mail transfer
1004 programs (ex. sendmail) and news servers.
1012 <concept>Message User Agent</concept>. It means mail readers and news
1018 <h3> Quoted-Printable
1019 <node> Quoted-Printable
1021 <concept>Quoted-Printable</concept> is a transfer encoding method of
1022 <dref>MIME</dref> defined in <dref>RFC 2045</dref>.
1024 If the data being encoded are mostly US-ASCII text, the encoded form
1025 of the data remains largely recognizable by humans.
1033 A RFC defines format of Internet mail message, mainly <concept>message
1038 news message is based on RFC 822, so <concept>Internet
1039 message</concept> may be more suitable than <concept>Internet
1043 <rfc number="822" type="STD 11" author="D. Crocker" title="Standard
1044 for the Format of ARPA Internet Text Messages"
1051 A RFC defines format of USENET message. It is a subset of <dref>RFC
1052 822</dref>. It is not Internet standard, but a lot of netnews
1053 excepting Usenet uses it.
1055 <rfc name="USENET" number="1036" author="M. Horton and R. Adams"
1056 title="Standard for Interchange of USENET Messages"
1057 date="December 1987" obsolete="850">
1063 <rfc number="2045" type="Standards Track" author="N. Freed and
1064 N. Borenstein" title="Multipurpose Internet Mail
1065 Extensions (MIME) Part One: Format of Internet Message
1066 Bodies" date="November 1996" obsolete="1521, 1522,
1073 <rfc number="2046" type="Standards Track" author="N. Freed and
1074 N. Borenstein" title="Multipurpose Internet Mail
1075 Extensions (MIME) Part Two: Media Types"
1076 date="November 1996" obsolete="1521, 1522, 1590">
1082 <rfc number="2048" type="Standards Track" author="N. Freed, J. Klensin
1083 and J. Postel" title="Multipurpose Internet Mail
1084 Extensions (MIME) Part Four: Registration Procedures"
1085 date="November 1996" obsolete="1521, 1522, 1590">
1091 <rfc number="2049" type="Standards Track" author="N. Freed and
1092 N. Borenstein" title="Multipurpose Internet Mail
1093 Extensions (MIME) Part Five: Conformance Criteria and
1094 Examples" date="November 1996" obsolete="1521, 1522,
1101 A textual data represented by only <dref>coded character set</dref>.
1102 It does not have information about font or typesetting.
1103 <cf node="text/plain">
1109 A <a node="MIME charset">MIME charset</a> for primary Latin script
1110 mainly written by English or other languages.
1112 It is a 7bit <dref>coded character set</dref> based on <dref>ISO
1113 2022</dref>, it contains only
1114 <dref>ASCII</dref> and <dref>code extension</dref> is not allowed.
1116 It is standard coded character set of Internet mail. If MIME charset
1117 is not specified, <concept>us-ascii</concept> is used as default.
1119 In addition, <concept>ASCII</concept> of <dref>RFC 822</dref> should
1120 be interpreted as us-ascii.
1123 <h2> How to report bugs
1126 If you write bug-reports and/or suggestions for improvement, please
1127 send them to the tm Mailing List:
1130 <li> Japanese <mail>bug-tm-ja@chamonix.jaist.ac.jp</mail>
1131 <li> English <mail>bug-tm-en@chamonix.jaist.ac.jp</mail>
1135 Notice that, we do not welcome bug reports about too old version.
1136 Bugs in old version might be fixed. So please try latest version at
1139 You should write <concept>good bug report</concept>. If you write
1140 only ``FLIM does not work'', we can not find such situations. At
1141 least, you should write name, type, variants and version of OS, emacs,
1142 APEL, FLIM, SEMI and MUA, and setting. In addition, if error occurs,
1143 to send backtrace is very important. <cf file="emacs" node="Bugs">
1145 Bug may not appear only your environment, but also in a lot of
1146 environment (otherwise it might not bug). Therefor if you send mail
1147 to author directly, we must write a lot of mails. So please send mail
1148 to address for tm bugs instead of author.
1151 Via the tm ML, you can report FLIM bugs, obtain the latest release of
1152 FLIM, and discuss future enhancements to FLIM. To join the tm ML,
1153 send empty e-mail to:
1156 <li> Japanese <mail>tm-ja-help@chamonix.jaist.ac.jp</mail>
1157 <li> English <mail>tm-en-help@chamonix.jaist.ac.jp</mail>
1161 <h2> CVS based development
1164 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
1165 \e$B?7$N
\e(B FLIM
\e$B$rF~<j$9$k$3$H$,$G$-$^$9!'
\e(B
1170 % cvs -d :pserver:anonymous@chamonix.jaist.ac.jp:/hare/cvs/root \
1173 CVS password: [CR] # NULL string
1177 % cvs -d :pserver:anonymous@chamonix.jaist.ac.jp:/hare/cvs/root \
1178 checkout [-r TAG] flim
1182 CVS
\e$B$rMQ$$$?3+H/$K;22C$7$?$$J}$O
\e(B
1185 <li> <mail>cvs@chamonix.jaist.ac.jp</mail>
1189 \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
1190 \e$B$r1h$($F8fO"Mm$/$@$5$$!#
\e(B
1193 <h2> History of FLIM
1196 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>
1197 \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
1198 B-encoding
\e$B@lMQ$N
\e(B encoded-word
\e$B$NI|9f2=%W%m%0%i%`$G$7$?!#
\e(B
1200 \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
1201 <file>tiny-mime.el</file>
\e$B$H$$$&%W%m%0%i%`$r=q$-$^$9!#$3$l$O!"
\e(BNemacs
1202 \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
1203 <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
1204 support
\e$B$7!"$^$?!"
\e(BMULE
\e$B$G07$&$3$H$,$G$-$k$5$^$6$^$J
\e(B <dref>MIME
1205 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
1206 \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
1207 \e$B$a$i$l$^$9!#
\e(B
1209 \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
1210 \e$B$?$a$N@_Dj=8$bG[I[$7$F$$$^$7$?$,!"$=$l$i$O8e$K
\e(B
1211 <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
1212 \e$B$&L>A0$GG[I[$5$l$^$9!#
\e(B
1214 \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
1215 <file>tm-body.el</file>
\e$B$r=q$-$^$9!#$3$l$O!"$9$0$K
\e(B
1216 <file>tm-view.el</file>
\e$B$H$$$&L>A0$KJQ$o$j$^$7$?$,!"$d$,$F!"$3$l$,
\e(B
1217 <file>tiny-mime.el</file>
\e$B$KBe$o$C$F!"
\e(Btm
\e$B$NCf3K$H$J$j$^$9!#
\e(B
1219 <file>tm-view.el</file>
\e$B$OEvA3!"
\e(BContent-Transfer-Encoding
\e$B$r07$&I,MW$,
\e(B
1220 \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
1221 \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
1222 Quoted-Printable
\e$B$N
\e(B code
\e$B$,DI2C$5$l$^$7$?!#$3$l$i$,
\e(B
1223 <file>mel-b.el</file>
\e$B$H
\e(B <file>mel-q.el</file>
\e$B$K$J$j$^$7$?!#
\e(B
1225 \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
1226 \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
1227 <file>mel-g.el</file>
\e$B$,DI2C$5$l$^$7$?!#
\e(B
1229 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
1230 \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
1231 <file>std11.el</file>
\e$B$KEv$?$j$^$9!#$^$?!"$3$N2aDx$G
\e(B
1232 <file>tiny-mime.el</file>
\e$B$OI|9f2=$r9T$&
\e(B <file>tm-ew-d.el</file>
\e$B$HId
\e(B
1233 \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
1234 <file>eword-decode.el</file>
\e$B$H
\e(B <file>eword-encode.el</file>
\e$B$N@hAD$K
\e(B
1235 \e$BEv$?$j$^$9!#
\e(B
1237 \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
1238 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
1239 \e$B$3$N$&$A$N
\e(B MEL
\e$B$,
\e(B FLIM
\e$B$ND>@\$N@hAD$KEv$?$j$^$9!#
\e(B
1241 \e$B8e$K!"
\e(BAPEL
\e$B$+$i
\e(B <file>std11.el</file>
\e$B$,0\$5$l!"$^$?!"
\e(B
1242 <file>mailcap.el</file>, <file>eword-decode.el</file>
\e$B$*$h$S
\e(B
1243 <file>eword-encode.el</file>
\e$B$,
\e(B SEMI
\e$B$+$i0\$5$l!"
\e(Bpackage
\e$B$NL>A0$,
\e(B FLIM
1244 \e$B$H$J$j$^$9!#
\e(B
1246 \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
1247 FLIM
\e$B$N;^$G$"$k
\e(B ``FLIM-FLAM''
\e$B$H$J$C$F$$$^$9!#
\e(B
1251 <node> Concept Index
1257 <node> Function Index
1263 <node> Variable Index