comparison doc/mhn.me @ 0:bce86c4163a3

Initial revision
author kono
date Mon, 18 Apr 2005 23:46:02 +0900
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:bce86c4163a3
1 .\" This file is automatically generated. Do not edit!
2 .\" @(#)$Id$
3 .SC MHN 1
4 .NA
5 mhn \- multi-media MH
6 .SY
7 mhn
8 \%[\%[+folder] \%[msgs] | \%[\-file\0file]]
9 .br
10 \%[\-part\0number]... \%[\-type\0content]...
11 .br
12 \%[\-list\0\%[\-headers]\0\%[\-noheaders]
13 .br
14 \%[\-realsize]\0\%[\-norealsize]] \%[-nolist]
15 .br
16 \%[\-show\0\%[\-serialonly]\0\%[\-noserialonly]
17 .br
18 \%[\-form\0formfile]\0\%[\-pause]\0\%[\-nopause]] \%[\-noshow]
19 .br
20 \%[\-store\0\%[\-auto]\0\%[\-noauto]] \%[\-nostore]
21 .br
22 \%[\-cache] \%[\-nocache] \%[\-rcache\0policy] \%[\-wcache\0policy]
23 .br
24 \%[\-check]\0\%[\-nocheck]
25 .br
26 \%[\-ebcdicsafe]\0\%[\-noebcdicsafe]
27 .br
28 \%[\-rfc934mode]\0\%[\-norfc934mode]
29 .br
30 \%[\-verbose]\0\%[\-noverbose]
31 .br
32 \%[\-help]
33 .DE
34 The \fImhn\fR command manipulates multi-media messages as specified in
35 RFC 1521.
36
37 Four action switches direct the operation of \fImhn\fR,
38 namely `\-list', `\-show', `\-store', and `-cache'.
39 Any of these switches may be used concurrently.
40 Normally these action switches will operate on the content of each of the
41 named messages.
42 However,
43 by using the `\-part' and `\-type' switches,
44 the scope of the operation can be focused on particular
45 subparts (of a multipart content) and/or particular content types.
46
47 A part specification consists of a series of numbers separated by dots.
48 For example,
49 in a multipart content containing three parts,
50 these would be named as 1, 2, and 3, respectively.
51 If part 2 was also a multipart content containing two parts,
52 these would be named as 2.1 and 2.2, respectively.
53 Note that the `\-part' switch is effective for only messages
54 containing a multipart content.
55 If a message has some other kind of content,
56 or if the part is itself another multipart content,
57 the `\-part' switch will not prevent the content from being acted upon.
58
59 A content specification consists of a content type and a subtype.
60 The initial list of \*(lqstandard\*(rq content types and subtypes can be found
61 in RFC 1521.
62 .ne 18
63 A list of commonly used contents is briefly reproduced here:
64 .sp
65 .nf
66 .in +.5i
67 .ta \w'application 'u
68 Type Subtypes
69 ---- --------
70 text plain
71 multipart mixed, alternative, digest, parallel
72 message rfc822, partial, external-body
73 application octet-stream, postscript
74 image jpeg, gif, x-pbm, x-pgm, x-ppm, x-xwd
75 audio basic
76 video mpeg
77 .re
78 .in -.5i
79 .fi
80 .sp
81 Subtypes are mandatory.
82 .PP
83 To specify a content,
84 regardless of its subtype,
85 just use the name of the content,
86 e.g.,
87 \*(lqaudio\*(rq.
88 To specify a specific subtype,
89 separate the two with a slash,
90 e.g.,
91 \*(lqaudio/basic\*(rq.
92 Note that regardless of the values given to the `\-type' switch,
93 a multipart content (of any subtype listed above) is always acted upon.
94 Further note that if the `\-type' switch is used,
95 and it is desirable to act on a message/external-body content,
96 then the `\-type' switch must be used twice:
97 once for message/external-body and once for the content externally referenced.
98
99 Each content may optionally have an integrity check associated with it.
100 If present and the `-check' switch is given,
101 then \fImhn\fR will attempt to verify the integrity of the content.
102
103 The option `\-file\ file' directs \fImhn\fR to use the specified
104 file as the source message, rather than a message from
105 a folder.
106 Note that the file should be a validly formatted message,
107 just like any other \fIMH\fR message.
108 It should \fBNOT\fR be in mail drop format
109 (to convert a file in mail drop format to a folder of \fIMH\fR messages,
110 see \fIinc\fR\0(1)).
111
112 .Uh "Listing the Contents"
113 The `\-list' switch tells \fImhn\fR to list the table of contents
114 associated with the named messages.
115 The `\-headers' switch indicates that a one-line banner should be
116 displayed above the listing.
117 The `\-realsize' switch tells \fImhn\fR to evaluate the \*(lqnative\*(rq
118 (decoded) format of each content prior to listing.
119 This provides an accurate count at the expense of a small delay.
120
121 .Uh "Showing the Contents"
122 The `\-show' switch tells \fImhn\fR to display the contents of the named
123 messages.
124 The headers of the message are displayed with the \fImhlproc\fR,
125 using format file \fImhl.headers\fR.
126 (The choice of format file can be overridden by the `\-form\0formfile' switch.)
127
128 \fImhn\fR will look for information in the user's profile to determine
129 how the different contents should be displayed.
130 This is accomplished by consulting a display string,
131 and executing it under \fB/bin/sh\fR,
132 with the standard input set to the content.
133 .ne 16
134 The display string may contain these escapes:
135 .sp
136 .nf
137 .in +.5i
138 .ta \w'%F 'u
139 %a additional arguments
140 %e exclusive execution
141 %f filename containing content
142 %F %e, %f, and stdin is terminal not content
143 %l display listing prior to displaying content
144 %p %l, and ask for confirmation
145 %s subtype
146 %d content description
147 .re
148 .in -.5i
149 .fi
150 .sp
151 For those display strings containing the e- or F-escape,
152 \fImhn\fR will execute at most one of these at any given time.
153 Although the F-escape expands to be the filename containing the content,
154 the e-escape has no expansion as far as the shell is concerned.
155
156 When the p-escape prompts for confirmation,
157 typing INTR (usually control-C) will tell \fImhn\fR not to display
158 that content.
159 (The p-escape can be disabled by specifying `\-nopause'.)
160 Further,
161 when \fImhn\fR is display a content,
162 typing QUIT (usually control-\\) will tell \fImhn\fR to wrap things up
163 immediately.
164
165 Note that if the content being displayed is multipart,
166 but not one of the subtypes listed above,
167 then the f- and F-escapes expand to multiple filenames,
168 one for each subordinate content.
169 Further,
170 stdin is not redirected from the terminal to the content.
171
172 First,
173 \fImhn\fR will look for an entry of the form:
174 .sp
175 .in +.5i
176 mhn-show-<type>/<subtype>
177 .in -.5i
178 .sp
179 to determine the command to use to display the content.
180 If this isn't found,
181 \fImhn\fR will look for an entry of the form:
182 .sp
183 .in +.5i
184 mhn-show-<type>
185 .in -.5i
186 .sp
187 to determine the display command.
188 .ne 10
189 If this isn't found,
190 \fImhn\fR has two default values:
191 .sp
192 .nf
193 .in +.5i
194 mhn-show-text/plain: %pmoreproc '%F'
195 mhn-show-message/rfc822: %pshow -file '%F'
196 .in -.5i
197 .fi
198 .sp
199 If neither apply,
200 \fImhn\fR will check to see if the message has a application/octet-stream
201 content with parameter \*(lqtype=tar\*(rq.
202 If so,
203 \fImhn\fR will use an appropriate command.
204 If not,
205 \fImhn\fR will complain.
206
207 .ne 10
208 Example entries might be:
209 .sp
210 .nf
211 .in +.5i
212 mhn-show-audio/basic: raw2audio 2>/dev/null | play
213 mhn-show-image: xv '%f'
214 mhn-show-application/PostScript: lpr -Pps
215 .in -.5i
216 .fi
217 .sp
218 Note that when using the f- or F-escape,
219 it's a good idea to use single-quotes around the escape.
220 This prevents misinterpretation by the shell of any funny characters
221 that might be present in the filename.
222
223 Because the text content might be in a non-ASCII character set,
224 when \fImhn\fR encounters a \*(lqcharset\*(rq parameter for this content,
225 it checks to see whether the environment variable $MM_CHARSET is set
226 and whether the value of this environment variable is equal to the value of
227 the charset parameter.
228 If not,
229 then
230 \fImhn\fR will look for an entry of the form:
231 .sp
232 .in +.5i
233 mhn-charset-<charset>
234 .in -.5i
235 .sp
236 which should contain a command creating an environment to render the
237 character set.
238 This command string should containing a single \*(lq%s\*(rq,
239 which will be filled-in with the command to display the content.
240
241 An example entry might be:
242 .sp
243 .in +.5i
244 mhn-charset-iso-8859-1: xterm -fn '-*-*-medium-r-normal-*-*-120-*-*-c-*-iso8859-*' -e %s
245 .in -.5i
246 .sp
247 Note that many pagination programs strip off the high-order bit.
248 However,
249 newer releases of the \fIless\fR program have modest support for
250 single-octet character sets.
251 The source to \fIless\fR version 177,
252 which has such support,
253 is found in the MH source tree under \fBmiscellany/less-177\fR.
254 In order to view messages sent in the ISO 8859/1 character set using
255 \fIless\fR,
256 .ne 9
257 put these lines in your \&.login file:
258 .sp
259 .nf
260 .in +.5i
261 setenv LESSCHARSET latin1
262 setenv LESS "-f"
263 .in -.5i
264 .fi
265 .sp
266 The first line tells \fIless\fR to use 8859/1 definition for determing
267 whether a character is \*(lqnormal\*(rq, \*(lqcontrol\*(lq, or
268 \*(lqbinary\*(rq.
269 The second line tells \fIless\fR not to warn you if it encounters a
270 file that has non-ASCII characters.
271 Then,
272 simply set the \fBmoreproc\fR profile entry to \fIless\fR,
273 and it will get called automatically.
274 (To handle other single-octet character sets,
275 look at the \fIless\fR\0(1) manual entry for information about the
276 \fBLESSCHARDEF\fR environment variable.)
277
278 Finally,
279 \fImhn\fR will process each message serially\0--\0it won't start showing
280 the next message until all the commands executed to display the
281 current message have terminated.
282 In the case of a multipart content (of any subtype listed above),
283 the content contains advice indicating if the parts should be
284 displayed serially or in parallel.
285 Because this may cause confusion,
286 particularly on uni-window displays,
287 the `\-serialonly' switch can be given to tell \fImhn\fR to never
288 display parts in parallel.
289
290 .Uh "Storing the Contents"
291 The `\-store' switch tells \fImhn\fR to store the contents of the
292 named messages in \*(lqnative\*(rq (decoded) format.
293 Two things must be determined:
294 the directory to store the content,
295 and the filenames.
296 Files are written in the directory given by the \fBmhn-storage\fR
297 profile entry,
298 .ne 6
299 e.g.,
300 .sp
301 .in +.5i
302 mhn-storage: /tmp
303 .in -.5i
304 .sp
305 If this entry isn't present,
306 the current working directory is used.
307
308 \fImhn\fR will look for information in the user's profile to determine
309 how the different contents should be stored.
310 This is achieved through the use of a formatting string,
311 .ne 13
312 which may contain these escapes:
313 .sp
314 .nf
315 .in +.5i
316 .ta \w'%P 'u
317 %m message number
318 %P .part
319 %p part
320 %s subtype
321 .re
322 .in -.5i
323 .fi
324 .sp
325 If the content isn't part of a multipart (of any subtype listed above) content,
326 the p-escapes are ignored.
327 Note that if the formatting string starts with a \*(lq+\*(rq character,
328 then these escapes are ignored,
329 and the content is stored in the named folder.
330 (A formatting string consisting solely of a \*(lq+\*(rq character
331 indicates the current folder.)
332 Further,
333 a formatting string consisting solely of a \*(lq-\*(rq character
334 indicates the standard-output.
335
336 First,
337 \fImhn\fR will look for an entry of the form:
338 .sp
339 .in +.5i
340 mhn-store-<type>/<subtype>
341 .in -.5i
342 .sp
343 to determine the formatting string.
344 If this isn't found,
345 \fImhn\fR will look for an entry of the form:
346 .sp
347 .in +.5i
348 mhn-store-<type>
349 .in -.5i
350 .sp
351 to determine the formatting string.
352 If this isn't found,
353 \fImhn\fR will check to see if the content is application/octet-stream
354 with parameter \*(lqtype=tar\*(rq.
355 If so,
356 \fImhn\fR will choose an appropriate filename.
357 If the content is not application/octet-stream,
358 then \fImhn\fR will check to see if the content is a message.
359 If so,
360 \fImhn\fR will use the value \*(lq+\*(rq.
361 If not,
362 \fImhn\fR will use the value \*(lq%m%P.%s\*(rq.
363
364 Note that if the formatting string starts with a '/',
365 then content will be stored in the full path given
366 (rather than using the value of \fBmhn-storage\fR or the current working
367 directory.)
368 Similarly,
369 if the formatting string starts with a '|',
370 then \fImhn\fR will execute a command which should ultimately store
371 the content.
372 Note that before executing the command,
373 \fImhn\fR will change to the appropriate directory.
374 Also note that if the formatting string starts with a '|',
375 then \fImhn\fR will also honor the a-escape when processing the
376 formatting string.
377
378 .ne 10
379 Example entries might be:
380 .sp
381 .nf
382 .in +.5i
383 mhn-store-text: %m%P.txt
384 mhn-store-audio/basic: | raw2audio -e ulaw -s 8000 -c 1 > %m%P.au
385 mhn-store-application/PostScript: %m%P.ps
386 .in -.5i
387 .fi
388 .sp
389 Further,
390 note that when asked to store a content containing a partial message,
391 \fImhn\fR will try to locate all of the portions and combine them accordingly.
392 Thus,
393 if someone's sent you a message in several parts,
394 you might put them all in their own folder and do:
395 .sp
396 .in +.5i
397 mhn all -store
398 .in -.5i
399 .sp
400 This will store exactly one message,
401 containing the sum of the parts.
402 Note that if \fImhn\fR can not locate each part,
403 it will not store anything.
404
405 Finally,
406 if the `\-auto' switch is given and the content contains information
407 indicating the filename the content should be stored as
408 (and if the filename doesn't begin with a '/'),
409 then the filename from the content will be used instead.
410
411 .Uh "External Access"
412 For contents of type message/external-body,
413 .ne 12
414 \fImhn\fR supports these access-types:
415 .sp
416 .nf
417 .in +.5i
418 afs
419 anon-ftp
420 ftp
421 local-file
422 mail-server
423 .in -.5i
424 .fi
425 .sp
426 For the \*(lqanon-ftp\*(rq and \*(lqftp\*(rq access types,
427 if your system supports a SOCKETs interface to TCP/IP,
428 then \fImhn\fR will use a built-in FTP client.
429 Otherwise,
430 \fImhn\fR will look for the \fBmhn-access-ftp\fR profile entry,
431 .ne 6
432 e.g.,
433 .sp
434 .in +.5i
435 mhn-access-ftp: myftp.sh
436 .in -.5i
437 .sp
438 to determine the pathname of a program to perform the FTP retrieval.
439 .ne 14
440 This program is invoked with these arguments:
441 .sp
442 .nf
443 .in +.5i
444 domain name of FTP-site
445 username
446 password
447 remote directory
448 remote filename
449 local filename
450 \*(lqascii\*(rq or \*(lqbinary\*(rq
451 .in -.5i
452 .fi
453 .sp
454 The program should terminate with a zero-valued exit-status if the
455 retrieval is successful.
456
457 .Uh "The Content Cache"
458 When \fImhn\fR encounters an external content containing a
459 \*(lqContent-ID:\*(rq field,
460 and if the content allows caching,
461 then depending on the caching behavior of \fImhn\fR,
462 the content might be read from or written to a cache.
463
464 The caching behavior of \fImhn\fR is controlled with
465 the `\-rcache' and `\-wcache' switches,
466 which define the policy for reading from,
467 and writing to,
468 the cache, respectively.
469 One of four policies may be specified:
470 \*(lqpublic\*(rq,
471 indicating that \fImhn\fR should make use of a
472 publically-accessible content cache;
473 \*(lqprivate\*(rq,
474 indicating that \fImhn\fR should make use of the user's
475 private content cache;
476 \*(lqnever\*(rq,
477 indicating that \fImhn\fR should never make use of caching;
478 and,
479 \*(lqask\*(rq,
480 indicating that \fImhn\fR should ask the user.
481
482 There are two directories where contents may be cached:
483 the profile entry \fBmhn-cache\fR names a directory containing
484 world-readable contents,
485 and,
486 the profile entry \fBmhn-private-cache\fR names a directory containing
487 private contents.
488 The former should be an absolute (rooted) directory name.
489 .ne 6
490 For example,
491 .sp
492 .in +.5i
493 mhn-cache: /tmp
494 .in -.5i
495 .sp
496 might be used if you didn't care that the cache got wiped after each reboot
497 of the system.
498 The latter is interpreted relative to the user's MH directory,
499 if not rooted,
500 .ne 6
501 e.g.,
502 .sp
503 .in +.5i
504 mhn-private-cache: .cache
505 .in -.5i
506 .sp
507 (which is the default value).
508
509 .Uh "Caching the Contents"
510 When you encounter a content of type message/external-body with access type
511 \*(lqmail-server\*(rq,
512 \fImhn\fR will ask you if may send a message to a mail-server
513 requesting the content,
514 .ne 14
515 e.g.,
516 .sp
517 .nf
518 .in +.5i
519 % show 1
520 Retrieve content by asking mail-server@...
521
522 SEND file
523
524 ? yes
525 mhn: request sent
526 .in -.5i
527 .fi
528 .sp
529 Regardless of your decision,
530 \fImhn\fR can't perform any other processing on the content.
531
532 However,
533 if \fImhn\fR is allowed to request the content,
534 then when it arrives,
535 there should be a top-level \*(lqContent-ID:\*(rq field which
536 corresponds to the value in the original message/external-body content.
537 You should now use the `-cache' switch to tell \fImhn\fR to enter the
538 arriving content into the content cache,
539 .ne 8
540 e.g.,
541 .sp
542 .nf
543 .in +.5i
544 % mhn -cache 2
545 caching message 2 as file ...
546 .in -.5i
547 .fi
548 .sp
549 You can then re-process the original message/external-body content,
550 and \*(lqthe right thing should happen\*(rq,
551 .ne 8
552 e.g.,
553 .sp
554 .nf
555 .in +.5i
556 % show 1
557 \0...
558 .in -.5i
559 .fi
560
561 .Uh "Composing the Contents"
562 The \fImhn\fR program can also be used as a simple editor to aid in
563 composing multi-media messages.
564 When invoked by a \fIwhatnow\fR program,
565 \fImhn\fR will expect the body of the draft to be formatted as an
566 \*(lq\fImhn\fR composition file.\*(rq
567
568 .ne 59
569 The syntax of this is straight-forward:
570 .sp
571 .nf
572 .in +.5i
573 body ::= 1*(content | EOL)
574
575 content ::= directive | plaintext
576
577 directive ::= "#" type "/" subtype
578 0*(";" attribute "=" value)
579 [ "(" comment ")" ]
580 [ "<" id ">" ]
581 [ "[" description "]" ]
582 [ filename ]
583 EOL
584
585 | "#@" type "/" subtype
586 0*(";" attribute "=" value)
587 [ "(" comment ")" ]
588 [ "<" id ">" ]
589 [ "[" description "]" ]
590 external-parameters
591 EOL
592
593 | "#forw"
594 [ "<" id ">" ]
595 [ "[" description "]" ]
596 [ "+"folder ] [ 0*msg ]
597 EOL
598
599 | "#begin"
600 [ "<" id ">" ]
601 [ "[" description "]" ]
602 [ "alternative"
603 | "parallel"
604 | something-else ]
605 EOL
606 1*body
607 "#end" EOL
608
609 plaintext ::= [ "Content-Description:"
610 description EOL EOL ]
611 1*line
612 [ "#" EOL ]
613
614 | "#<" type "/" subtype
615 0*(";" attribute "=" value)
616 [ "(" comment ")" ]
617 [ "[" description "]" ]
618 EOL
619 1*line
620 [ "#" EOL ]
621
622 line ::= "##" text EOL
623 -- interpreted as "#"text EOL
624 | text EOL
625 .in -.5i
626 .fi
627 .sp
628 Basically,
629 the body contains one or more contents.
630 A content consists of either a directive,
631 indicated with a \*(lq#\*(rq as the first character of a line;
632 or,
633 plaintext (one or more lines of text).
634 The continuation character, \*(lq\\\*(lq, may be used to enter a single
635 .ne 11
636 directive on more than one line,
637 e.g.,
638 .sp
639 .nf
640 .in +.5i
641 #@application/octet-stream; \\
642 type=tar; \\
643 x-conversions=compress
644 .in -.5i
645 .fi
646 .sp
647 There are four kinds of directives:
648 \*(lqtype\*(rq directives,
649 which name the type and subtype of the content;
650 \*(lqexternal-type\*(rq directives,
651 which also name the type and subtype of the content;
652 the \*(lqforw\*(rq directive,
653 which is used to forward a digest of messages;
654 and,
655 the \*(lqbegin\*(rq directive,
656 which is used to create a multipart content.
657
658 For the type directives,
659 the user may optionally specify the name of a file containing the
660 contents in \*(lqnative\*(rq (decoded) format.
661 (If the filename starts with the \*(lq|\*(rq character,
662 then this gives a command whose output is captured accordingly.)
663 If a filename is not given,
664 \fImhn\fR will look for information in the user's profile to determine
665 how the different contents should be composed.
666 This is accomplished by consulting a composition string,
667 and executing it under \fB/bin/sh\fR,
668 with the standard output set to the content.
669 .ne 13
670 The composition string may contain these escapes:
671 .sp
672 .nf
673 .in +.5i
674 .ta \w'%P 'u
675 %a additional arguments
676 %f filename containing content
677 %F %f, and stdout is not re-directed
678 %s subtype
679 .re
680 .in -.5i
681 .fi
682 .sp
683 First,
684 \fImhn\fR will look for an entry of the form:
685 .sp
686 .in +.5i
687 mhn-compose-<type>/<subtype>
688 .in -.5i
689 .sp
690 to determine the command to use to compose the content.
691 If this isn't found,
692 \fImhn\fR will look for an entry of the form:
693 .sp
694 .in +.5i
695 mhn-compose-<type>
696 .in -.5i
697 .sp
698 to determine the composition command.
699 If this isn't found,
700 \fImhn\fR will complain.
701
702 An example entry might be:
703 .sp
704 .in +.5i
705 mhn-compose-audio/basic: record | raw2audio -F
706 .in -.5i
707 .sp
708 Because commands like these will vary,
709 depending on the display environment used for login,
710 composition strings for different contents should probably be put in
711 the file specified by the \fB$MHN\fR environment variable,
712 instead of directly in your user profile.
713
714 The external-type directives are used to provide a reference to a content,
715 rather than enclosing the contents itself.
716 Hence,
717 instead of providing a filename as with the type directives,
718 external-parameters are supplied.
719 These look like regular parameters,
720 .ne 15
721 so they must be separated accordingly,
722 e.g.,
723 .sp
724 .nf
725 .in +.5i
726 #@application/octet-stream; \\
727 type=tar; \\
728 x-conversions=compress [] \\
729 access-type=anon-ftp; \\
730 name="mh-mime.tar.Z"; \\
731 directory="mrose/mh-mime"; \\
732 site="ftp.ics.uci.edu"
733 .in -.5i
734 .fi
735 .sp
736 By specifying \*(lq[]\*(rq,
737 an empty description string is given,
738 and the start of the external-parameters is identified.
739 .ne 19
740 These parameters are of the form:
741 .sp
742 .nf
743 .in +.5i
744 .ta \w'access-type= 'u
745 access-type= usually \fIanon-ftp\fR or \fImail-server\fR
746 name= filename
747 permission= read-only or read-write
748 site= hostname
749 directory= directoryname (optional)
750 mode= usually \fIascii\fR or \fIimage\fR (optional)
751 size= number of octets
752 server= mailbox
753 subject= subject to send
754 body= command to send for retrieval
755 .re
756 .in -.5i
757 .fi
758 .sp
759
760 For the forw directive,
761 the user may optionally specify the name of the folder and which
762 messages are to be forwarded.
763 if a folder is not given,
764 it defaults to the current folder.
765 Similarly,
766 if a message is not given,
767 it defaults to the current message.
768 Hence,
769 the forw directive is similar to the \fIforw\fR\0(1) command,
770 except that the former uses the MIME rules for encapsulation
771 rather than those specified in RFC 934.
772 Usage of the `\-rfc934mode' switch indicates whether \fImhn\fR should
773 attempt to utilize the encapsulation rules in such a way as to appear
774 that RFC 934 is being used.
775 If given,
776 then RFC 934-compliant user-agents should be able to burst the message on
777 reception\0--\0providing that the messages being encapsulated do not
778 contain encapsulated messages themselves.
779 The drawback of this approach is that the encapsulations are generated
780 by placing an extra newline at the end of the body of each message.
781
782 For the begin directive,
783 the user must specify at least one content between
784 the begin and end pairs.
785
786 For all of these directives,
787 the user may include a brief description of the content between
788 the \*(lq[\*(rq character and the \*(lq]\*(rq character.
789 By default,
790 \fImhn\fR will generate a unique \*(lqContent-ID:\*(rq for each directive;
791 however,
792 the user may override this by defining the ID using the
793 \*(lq<\*(rq and \*(lq>\*(rq characters.
794 Putting this all together,
795 .ne 15
796 here is a brief example of what a user's components file might look like:
797 .sp
798 .nf
799 .in +.5i
800 To:
801 cc:
802 Subject:
803 --------
804 #audio/basic [Flint phone] \\
805 |raw2audio -F < /home/mrose/lib/multi-media/flint.au
806 #image/gif [MTR's photo] \\
807 /home/mrose/lib/multi-media/mrose.gif
808 .in -.5i
809 .fi
810 .sp
811 For a later example,
812 we'll call this components file \fImhncomps\fR.
813
814 As noted earlier,
815 in addition to directives,
816 plaintext can be present.
817 Plaintext is gathered,
818 until a directive is found or the draft is exhausted,
819 and this is made to form a text content.
820 If the plaintext must contain a \*(lq#\*(rq at the beginning of a line,
821 simply double it,
822 .ne 6
823 e.g.,
824 .sp
825 .in +.5i
826 ##when sent, this line will start with only one #
827 .in -.5i
828 .sp
829 If you want to end the plaintext prior to a directive,
830 e.g.,
831 to have two plaintext contents adjacent,
832 simply insert a line containing a single \*(lq#\*(rq character,
833 .ne 10
834 e.g.,
835 .sp
836 .nf
837 .in +.5i
838 this is the first content
839 #
840 and this is the second
841 .in -.5i
842 .fi
843 .sp
844 Finally,
845 if the plaintext starts with a line of the form:
846 .sp
847 .in +.5i
848 Content-Description: text
849 .in -.5i
850 .sp
851 then this will be used to describe the plaintext content.
852 \fBNOTE WELL:\fR you must follow this line with a blank line before
853 starting your text.
854
855 By default,
856 plaintext is captured as a text/plain content.
857 You can override this by starting the plaintext with \*(lq#<\*(rq
858 followed by a content-type specification,
859 .ne 11
860 e.g.,
861 .sp
862 .nf
863 .in +.5i
864 #<text/richtext
865 this content will be tagged as text/richtext
866 #
867 and this content will be tagged as text/plain
868 .in -.5i
869 .fi
870 .sp
871 Note that if you use the \*(lq#<\*(rq plaintext-form,
872 then the content-description must be on the same line which identifies
873 the content type of the plaintext.
874
875 If \fImhn\fR is successful,
876 it renames the original draft to start with the \*(lq,\*(rq character
877 and end with the string \*(lq.orig\*(rq,
878 e.g.,
879 if you are editing the file \*(lqdraft\*(rq,
880 it will be renamed to \*(lq,draft.orig\*(rq.
881 This allows you to easily recover the \fImhn\fR composition file.
882
883 If the `-check' switch is given,
884 \fImhn\fR will associate an integrity check with each content.
885
886 .Uh "Automatic Composition"
887 Note that MH will not invoke \fImhn\fR automatically,
888 unless you add this line to your \&.mh\(ruprofile file:
889 .sp
890 .in +.5i
891 automhnproc: mhn
892 .in -.5i
893 .sp
894 Otherwise,
895 you must specifically give the command
896 .sp
897 .in +.5i
898 What now? edit mhn
899 .in -.5i
900 .sp
901 prior to sending the draft.
902
903 You can easily tailor MH to help you remember to do this.
904 .ne 10
905 Suppose you have these lines in your profile:
906 .sp
907 .nf
908 .in +.5i
909 mcomp: -editor mprompter -form mhncomps
910 mprompter: -noprepend -norapid
911 mprompter-next: mhn
912 .in -.5i
913 .fi
914 .sp
915 where \fImcomp\fR is a link to \fIcomp\fR\0(1),
916 and \fImprompter\fR is a link to \fIprompter\fR\0(1).
917 Then to send a message using the \fImhncomps\fR components file above,
918 .ne 26
919 the sequence is:
920 .sp
921 .nf
922 .in +.5i
923 % \fBmcomp\fR
924 To: \fBuser@host\fR
925 cc:
926 Subject: \fBmulti-media message\fR
927 --------
928 #audio/basic [Flint phone] \\
929 |raw2audio -F < /home/mrose/lib/multi-media/flint.au
930 #image/gif [MTR's photo] \\
931 /home/mrose/lib/multi-media/mrose.gif
932
933 --------Enter additional text
934
935 \fBThis message contains three contents.\fR
936 \fB<CTRL-D>\fR
937 --------
938
939 What now? \fBedit\fR (this invokes \fImhn\fR)
940
941 What now? \fBsend\fR
942 .in -.5i
943 .fi
944 .sp
945 You have to remember to type the additional edit command,
946 but it should be fairly obvious from the interaction.
947
948 Finally,
949 you should consider adding this line to your profile:
950 .sp
951 .in +.5i
952 lproc: show
953 .in -.5i
954 .sp
955 This way,
956 if you decide to \fBlist\fR after invoking \fImhn\fR as your editor,
957 the command
958 .sp
959 .in +.5i
960 What now? list
961 .in -.5i
962 .sp
963 will work as you expect.
964
965 .Uh "Sending Files via Mail"
966 When you want to send a bunch of files to someone,
967 you can run the \fIviamail\fR shell script,
968 which is similar the tarmail command:
969 .sp
970 .in +.5i
971 /usr/local/mh/lib/viamail mailpath \*(lqsubject\*(rq files\0...
972 .in -.5i
973 .sp
974 \fIviamail\fR will archive the directories/files you name with \fItar\fR\0(1),
975 and then mail the compressed archive to the `mailpath' with the given
976 `subject'.
977 The archive will be automatically split up into as many messages as
978 necessary in order to get past most mailers.
979
980 Sometimes you want \fIviamail\fR to pause after posting a partial message.
981 This is usually the case when you are running \fIsendmail\fR and
982 expect to generate a lot of partial messages.
983 If the first argument given to \fIviamail\fR starts with a dash,
984 then it is interpreted as the number of seconds to pause in between postings,
985 .ne 6
986 e.g.,
987 .sp
988 .in +.5i
989 /usr/local/mh/lib/viamail -300 mailpath \*(lqsubject\*(rq files\0...
990 .in -.5i
991 .sp
992 will pause 5 minutes in between each posting.
993
994 When these messages are received,
995 invoke \fImhn\fR once,
996 with the list of messages,
997 and the `\-store' command.
998 The \fImhn\fR program will then store exactly one message containing the
999 archive.
1000 You can then use `\-show' to find out what's inside;
1001 possibly followed by `\-store' to write the archive to a file where you
1002 .ne 26
1003 can subsequently uncompress and untar it, e.g.,
1004 .sp
1005 .nf
1006 .in +.5i
1007 % mhn -list all
1008 msg part type/subtype size description
1009 1 message/partial 47K part 1 of 4
1010 2 message/partial 47K part 2 of 4
1011 3 message/partial 47K part 3 of 4
1012 4 message/partial 18K part 4 of 4
1013 % mhn -store all
1014 % mhn -list -verbose last
1015 msg part type/subtype size description
1016 5 application/octet-stream 118K
1017 (extract with uncompress | tar xvpf -)
1018 type=tar
1019 x-conversions=compress
1020 % mhn -show last
1021 msg part type/subtype size description
1022 5 application/octet-stream 118K
1023 -- headers of message, followed by \fItar\fR listing appears here
1024 % mhn -store last
1025 % uncompress < 5.tar.Z | tar xvpf -
1026 .in -.5i
1027 .fi
1028 .sp
1029 Alternately,
1030 by using the `\-auto' switch,
1031 \fImhn\fR will automatically do the extraction for you,
1032 .ne 26
1033 e.g.,
1034 .sp
1035 .nf
1036 .in +.5i
1037 % mhn -list all
1038 msg part type/subtype size description
1039 1 message/partial 47K part 1 of 4
1040 2 message/partial 47K part 2 of 4
1041 3 message/partial 47K part 3 of 4
1042 4 message/partial 18K part 4 of 4
1043 % mhn -store all
1044 % mhn -list -verbose last
1045 msg part type/subtype size description
1046 5 application/octet-stream 118K
1047 (extract with uncompress | tar xvpf -)
1048 type=tar
1049 x-conversions=compress
1050 % mhn -show last
1051 msg part type/subtype size description
1052 5 application/octet-stream 118K
1053 -- headers of message, followed by \fItar\fR listing appears here
1054 % mhn -store -auto last
1055 -- \fItar\fR listing appears here as files are extracted
1056 .in -.5i
1057 .fi
1058 .sp
1059 As the second \fItar\fR listing is generated,
1060 the files are extracted.
1061 A prudent user will never put `\-auto' in the \&.mh\(ruprofile file.
1062 The correct procedure is to first use `\-show',
1063 to find out what will be extracted.
1064 Then \fImhn\fR can be invoked with `\-store' and `\-auto' to perform
1065 the extraction.
1066
1067 .Uh "User Environment"
1068 Because the display environment in which \fImhn\fR operates may vary
1069 for a user,
1070 \fImhn\fR will look for the environment variable \fB$MHN\fR.
1071 If present,
1072 this specifies the name of an additional user profile which should be read.
1073 Hence,
1074 when a user logs in on a particular display device,
1075 this environment variable should be set to refer to a file containing
1076 definitions useful for the display device.
1077 Normally,
1078 only entries of the form
1079 .sp
1080 .in +.5i
1081 mhn-show-<type>/<subtype>
1082 .br
1083 mhn-show-<type>
1084 .in -.5i
1085 .sp
1086 need be present.
1087 Finally,
1088 \fImhn\fR will attempt to consult one other additional user profile,
1089 .ne 6
1090 e.g.,
1091 .sp
1092 .in +.5i
1093 /usr/local/mh/lib/mhn_defaults
1094 .in -.5i
1095 .sp
1096 which is created automatically during MH installation.
1097 .Fi
1098 ^$HOME/\&.mh\(ruprofile~^The user profile
1099 ^$MHN~^Additional profile entries
1100 ^/usr/local/mh/lib/mhn_defaults~^System-default profile entries
1101 ^/usr/local/mh/lib/mhl.headers~^The headers template
1102 .Pr
1103 ^Path:~^To determine the user's MH directory
1104 .Ps
1105 ^Current\-Folder:~^To find the default current folder
1106 .Ps
1107 ^mhlproc:~^Default program to display message headers
1108 .Ps
1109 ^mhn-access-ftp:~^Program to retrieve contents via FTP
1110 .Ps
1111 ^mhn-cache~^Public directory to store cached external contents
1112 .Ps
1113 ^mhn-charset-<charset>~^Template for environment to render character sets
1114 .Ps
1115 ^mhn-compose-<type>*~^Template for composing contents
1116 .Ps
1117 ^mhn-private-cache~^Personal directory to store cached external contents
1118 .Ps
1119 ^mhn-show-<type>*~^Template for displaying contents
1120 .Ps
1121 ^mhn-storage~^Directory to store contents
1122 .Ps
1123 ^mhn-store-<type>*~^Template for storing contents
1124 .Ps
1125 ^moreproc:~^Default program to display text/plain content
1126 .Sa
1127 mhl(1)
1128 .br
1129 \fIMIME: Mechanisms for Specifying and Describing the Format of
1130 Internet Message Bodies\fR
1131 (RFC 1521),
1132 .br
1133 \fIProposed Standard for Message Encapsulation\fR
1134 (RFC 934).
1135 .De
1136 `+folder' defaults to the current folder
1137 .Ds
1138 `msgs' defaults to cur
1139 .Ds
1140 `\-noauto'
1141 .Ds
1142 `\-nocache'
1143 .Ds
1144 `\-nocheck'
1145 .Ds
1146 `\-noebcdicsafe'
1147 .Ds
1148 `\-form\0mhl.headers'
1149 .Ds
1150 `\-headers'
1151 .Ds
1152 `\-pause'
1153 .Ds
1154 `\-rcache\0ask'
1155 .Ds
1156 `\-realsize'
1157 .Ds
1158 `\-rfc934mode'
1159 .Ds
1160 `\-noserialonly'
1161 .Ds
1162 `\-show'
1163 .Ds
1164 `\-noverbose'
1165 .Ds
1166 `\-wcache\0ask'
1167 .Co
1168 If a folder is given,
1169 it will become the current folder.
1170 The last message selected will become the current message.
1171 .Bu
1172 Partial messages contained within a multipart content are not reassembled
1173 with the `\-store' switch.
1174 .En