1 | .\" |
---|
2 | .\" %nmhwarning% |
---|
3 | .\" $Id: mhstore.man,v 1.1.1.1 1999-02-07 18:14:21 danw Exp $ |
---|
4 | .\" |
---|
5 | .\" include the -mh macro file |
---|
6 | .so %etcdir%/tmac.h |
---|
7 | .\" |
---|
8 | .TH MHSTORE %manext1% MH.6.8 [%nmhversion%] |
---|
9 | .SH NAME |
---|
10 | mhstore \- store contents of MIME messages into files |
---|
11 | .SH SYNOPSIS |
---|
12 | .in +.5i |
---|
13 | .ti -.5i |
---|
14 | mhstore \%[+folder] \%[msgs] \%[\-file file] |
---|
15 | .br |
---|
16 | \%[\-part number]... \%[\-type content]... |
---|
17 | .br |
---|
18 | \%[\-auto] \%[\-noauto] |
---|
19 | \%[\-check] \%[\-nocheck] |
---|
20 | .br |
---|
21 | \%[\-rcache policy] \%[\-wcache policy] |
---|
22 | .br |
---|
23 | \%[\-verbose] \%[\-noverbose] |
---|
24 | \%[\-version] |
---|
25 | \%[\-help] |
---|
26 | .in -.5i |
---|
27 | |
---|
28 | .SH DESCRIPTION |
---|
29 | The \fImhstore\fR command allows you to store the contents of a |
---|
30 | collection of MIME (multi-media) messages into files or other |
---|
31 | messages. |
---|
32 | |
---|
33 | \fImhstore\fR manipulates multi-media messages as specified in |
---|
34 | RFC\-2045 thru RFC\-2049. |
---|
35 | |
---|
36 | By default, \fImhstore\fR will store all the parts of each message. |
---|
37 | Each part will be store in a separate file. The header fields of |
---|
38 | the message are not stored. By using the `\-part' and `\-type' |
---|
39 | switches, you may limit the scope of \fImhstore\fR to particular |
---|
40 | subparts (of a multipart content) and/or particular content types. |
---|
41 | |
---|
42 | The option `\-file\ file' directs \fImhstore\fR to use the specified |
---|
43 | file as the source message, rather than a message from a folder. |
---|
44 | If you specify this file as \*(lq-\*(rq, then \fImhstore\fR will |
---|
45 | accept the source message on the standard input. Note that the |
---|
46 | file, or input from standard input should be a validly formatted |
---|
47 | message, just like any other \fInmh\fR message. It should \fBNOT\fR |
---|
48 | be in mail drop format (to convert a file in mail drop format to |
---|
49 | a folder of \fInmh\fR messages, see \fIinc\fR\0(1)). |
---|
50 | |
---|
51 | A part specification consists of a series of numbers separated by |
---|
52 | dots. For example, in a multipart content containing three parts, |
---|
53 | these would be named as 1, 2, and 3, respectively. If part 2 was |
---|
54 | also a multipart content containing two parts, these would be named |
---|
55 | as 2.1 and 2.2, respectively. Note that the `\-part' switch is |
---|
56 | effective for only messages containing a multipart content. If a |
---|
57 | message has some other kind of content, or if the part is itself |
---|
58 | another multipart content, the `\-part' switch will not prevent |
---|
59 | the content from being acted upon. |
---|
60 | |
---|
61 | A content specification consists of a content type and a subtype. |
---|
62 | The initial list of \*(lqstandard\*(rq content types and subtypes |
---|
63 | can be found in RFC\-2046. |
---|
64 | .ne 18 |
---|
65 | A list of commonly used contents is briefly reproduced here: |
---|
66 | .sp |
---|
67 | .nf |
---|
68 | .in +.5i |
---|
69 | .ta \w'application 'u |
---|
70 | Type Subtypes |
---|
71 | ---- -------- |
---|
72 | text plain, enriched |
---|
73 | multipart mixed, alternative, digest, parallel |
---|
74 | message rfc822, partial, external-body |
---|
75 | application octet-stream, postscript |
---|
76 | image jpeg, gif, png |
---|
77 | audio basic |
---|
78 | video mpeg |
---|
79 | .re |
---|
80 | .in -.5i |
---|
81 | .fi |
---|
82 | .sp |
---|
83 | A legal MIME message must contain a subtype specification. |
---|
84 | .PP |
---|
85 | To specify a content, regardless of its subtype, just use the name |
---|
86 | of the content, e.g., \*(lqaudio\*(rq. To specify a specific |
---|
87 | subtype, separate the two with a slash, e.g., \*(lqaudio/basic\*(rq. |
---|
88 | Note that regardless of the values given to the `\-type' switch, |
---|
89 | a multipart content (of any subtype listed above) is always acted |
---|
90 | upon. Further note that if the `\-type' switch is used, and it is |
---|
91 | desirable to act on a message/external-body content, then the |
---|
92 | `\-type' switch must be used twice: once for message/external-body |
---|
93 | and once for the content externally referenced. |
---|
94 | |
---|
95 | .Uh "Checking the Contents" |
---|
96 | The `\-check' switch tells \fImhstore\fR to check each content for |
---|
97 | an integrity checksum. If a content has such a checksum (specified |
---|
98 | as a Content-MD5 header field), then \fImhstore\fR will attempt to |
---|
99 | verify the integrity of the content. |
---|
100 | |
---|
101 | .Uh "Storing the Contents" |
---|
102 | The \fImhstore\fR will store the contents of the named messages in |
---|
103 | \*(lqnative\*(rq (decoded) format. Two things must be determined: |
---|
104 | the directory to store the content, and the filenames. Files are |
---|
105 | written in the directory given by the \fBnmh-storage\fR profile |
---|
106 | entry, |
---|
107 | .ne 6 |
---|
108 | e.g., |
---|
109 | .sp |
---|
110 | .in +.5i |
---|
111 | nmh-storage: /tmp |
---|
112 | .in -.5i |
---|
113 | .sp |
---|
114 | If this entry isn't present, |
---|
115 | the current working directory is used. |
---|
116 | |
---|
117 | If the `\-auto' switch is given, then \fImhstore\fR will check if |
---|
118 | the message contains information indicating the filename that should |
---|
119 | be used to store the content. This information should be specified |
---|
120 | as the attribute \*(lqname=filename\*(rq in the Content-Type header |
---|
121 | for the content you are storing. For security reasons, this filename |
---|
122 | will be ignored if it begins with the character '/', '.', '|', or |
---|
123 | '!', or if it contains the character '%'. For the sake of security, |
---|
124 | this switch is not the default, and it is recommended that you do |
---|
125 | NOT put the `\-auto' switch in your \&.mh\(ruprofile file. |
---|
126 | |
---|
127 | If the `\-auto' switch is not given (or is being ignored for security |
---|
128 | reasons) then \fImhstore\fR will look in the user's profile for a |
---|
129 | \*(lqformatting string\*(rq to determine how the different contents |
---|
130 | should be stored. First, \fImhstore\fR will look for an entry of |
---|
131 | the form: |
---|
132 | .sp |
---|
133 | .in +.5i |
---|
134 | mhstore-store-<type>/<subtype> |
---|
135 | .in -.5i |
---|
136 | .sp |
---|
137 | to determine the formatting string. If this isn't found, \fImhstore\fR |
---|
138 | will look for an entry of the form: |
---|
139 | .sp |
---|
140 | .in +.5i |
---|
141 | mhstore-store-<type> |
---|
142 | .in -.5i |
---|
143 | .sp |
---|
144 | to determine the formatting string. |
---|
145 | |
---|
146 | If the formatting string starts with a \*(lq+\*(rq character, then |
---|
147 | content is stored in the named folder. A formatting string consisting |
---|
148 | solely of a \*(lq+\*(rq character is interpreted to be the current |
---|
149 | folder. |
---|
150 | |
---|
151 | If the formatting string consists solely of a \*(lq-\*(rq character, |
---|
152 | then the content is sent to the standard output. |
---|
153 | |
---|
154 | If the formatting string starts with a '|', then the display string |
---|
155 | will represent a command for \fImhstore\fR to execute which should |
---|
156 | ultimately store the content. The content will be passed to the |
---|
157 | standard input of the command. Before the command is executed, |
---|
158 | \fImhstore\fR will change to the appropriate directory, and any |
---|
159 | escapes (given below) in the display string will be expanded. |
---|
160 | |
---|
161 | Otherwise the formatting string will represent a pathname in which |
---|
162 | to store the content. If the formatting string starts with a '/', |
---|
163 | then the content will be stored in the full path given, else the |
---|
164 | file name will be relative to the value of \fBnmh-storage\fR or |
---|
165 | the current working directory. Any escapes (given below) will be |
---|
166 | expanded, except for the a-escape. |
---|
167 | |
---|
168 | A command or pathname formatting string may contain the following |
---|
169 | escapes. If the content isn't part of a multipart (of any subtype |
---|
170 | listed above) content, the p-escapes are ignored. |
---|
171 | .sp |
---|
172 | .nf |
---|
173 | .in +.5i |
---|
174 | .ta \w'%P 'u |
---|
175 | %a Parameters from Content-type (only valid with command) |
---|
176 | %m Insert message number |
---|
177 | %P Insert part number with leading dot |
---|
178 | %p Insert part number without leading dot |
---|
179 | %t Insert content type |
---|
180 | %s Insert content subtype |
---|
181 | %% Insert character % |
---|
182 | .re |
---|
183 | .in -.5i |
---|
184 | .fi |
---|
185 | .sp |
---|
186 | If no formatting string is found, \fImhstore\fR will check to see |
---|
187 | if the content is application/octet-stream with parameter |
---|
188 | \*(lqtype=tar\*(rq. If so, \fImhstore\fR will choose an appropriate |
---|
189 | filename. If the content is not application/octet-stream, then |
---|
190 | \fImhstore\fR will check to see if the content is a message. If |
---|
191 | so, \fImhstore\fR will use the value \*(lq+\*(rq. As a last resort, |
---|
192 | \fImhstore\fR will use the value \*(lq%m%P.%s\*(rq. |
---|
193 | |
---|
194 | .ne 10 |
---|
195 | Example profile entries might be: |
---|
196 | .sp |
---|
197 | .nf |
---|
198 | .in +.5i |
---|
199 | mhstore-store-text: %m%P.txt |
---|
200 | mhstore-store-text: +inbox |
---|
201 | mhstore-store-message/partial: + |
---|
202 | mhstore-store-audio/basic: | raw2audio -e ulaw -s 8000 -c 1 > %m%P.au |
---|
203 | mhstore-store-image/jpeg: %m%P.jpg |
---|
204 | mhstore-store-application/PostScript: %m%P.ps |
---|
205 | .in -.5i |
---|
206 | .fi |
---|
207 | .sp |
---|
208 | .Uh "Reassembling Messages of Type message/partial" |
---|
209 | \fImhstore\fR is also able to reassemble messages that have been |
---|
210 | split into multiple messages of type \*(lqmessage/partial\*(rq. |
---|
211 | |
---|
212 | When asked to store a content containing a partial message, |
---|
213 | \fImhstore\fR will try to locate all of the portions and combine |
---|
214 | them accordingly. The default is to store the combined parts as |
---|
215 | a new message in the current folder, although this can be changed |
---|
216 | using formatting strings as discussed above. Thus, if someone has |
---|
217 | sent you a message in several parts (such as the output from |
---|
218 | \fIsendfiles\fR), you can easily reassemble them all into a single |
---|
219 | message in the following fashion: |
---|
220 | .sp |
---|
221 | .nf |
---|
222 | .in +.5i |
---|
223 | % mhlist 5-8 |
---|
224 | msg part type/subtype size description |
---|
225 | 5 message/partial 47K part 1 of 4 |
---|
226 | 6 message/partial 47K part 2 of 4 |
---|
227 | 7 message/partial 47K part 3 of 4 |
---|
228 | 8 message/partial 18K part 4 of 4 |
---|
229 | % mhstore 5-8 |
---|
230 | reassembling partials 5,6,7,8 to folder inbox as message 9 |
---|
231 | % mhlist -verbose 9 |
---|
232 | msg part type/subtype size description |
---|
233 | 9 application/octet-stream 118K |
---|
234 | (extract with uncompress | tar xvpf -) |
---|
235 | type=tar |
---|
236 | conversions=compress |
---|
237 | .in -.5i |
---|
238 | .fi |
---|
239 | .sp |
---|
240 | This will store exactly one message, containing the sum of the |
---|
241 | parts. It doesn't matter whether the partials are specified in |
---|
242 | order, since \fImhstore\fR will sort the partials, so that they |
---|
243 | are combined in the correct order. But if \fImhstore\fR can not |
---|
244 | locate every partial necessary to reassemble the message, it will |
---|
245 | not store anything. |
---|
246 | |
---|
247 | .Uh "External Access" |
---|
248 | For contents of type message/external-body, |
---|
249 | .ne 12 |
---|
250 | \fImhstore\fR supports these access-types: |
---|
251 | .sp |
---|
252 | .nf |
---|
253 | .in +.5i |
---|
254 | afs |
---|
255 | anon-ftp |
---|
256 | ftp |
---|
257 | local-file |
---|
258 | mail-server |
---|
259 | .in -.5i |
---|
260 | .fi |
---|
261 | .sp |
---|
262 | For the \*(lqanon-ftp\*(rq and \*(lqftp\*(rq access types, |
---|
263 | \fImhstore\fR will look for the \fBnmh-access-ftp\fR |
---|
264 | profile entry, |
---|
265 | .ne 6 |
---|
266 | e.g., |
---|
267 | .sp |
---|
268 | .in +.5i |
---|
269 | nmh-access-ftp: myftp.sh |
---|
270 | .in -.5i |
---|
271 | .sp |
---|
272 | to determine the pathname of a program to perform the FTP retrieval. |
---|
273 | .ne 14 |
---|
274 | This program is invoked with these arguments: |
---|
275 | .sp |
---|
276 | .nf |
---|
277 | .in +.5i |
---|
278 | domain name of FTP-site |
---|
279 | username |
---|
280 | password |
---|
281 | remote directory |
---|
282 | remote filename |
---|
283 | local filename |
---|
284 | \*(lqascii\*(rq or \*(lqbinary\*(rq |
---|
285 | .in -.5i |
---|
286 | .fi |
---|
287 | .sp |
---|
288 | The program should terminate with an exit status of zero if the |
---|
289 | retrieval is successful, and a non-zero exit status otherwise. |
---|
290 | |
---|
291 | If this entry is not provided, then \fImhstore\fR will use a simple |
---|
292 | built-in FTP client to perform the retrieval. |
---|
293 | |
---|
294 | .Uh "The Content Cache" |
---|
295 | When \fImhstore\fR encounters an external content containing a |
---|
296 | \*(lqContent-ID:\*(rq field, and if the content allows caching, then |
---|
297 | depending on the caching behavior of \fImhstore\fR, the content might be |
---|
298 | read from or written to a cache. |
---|
299 | |
---|
300 | The caching behavior of \fImhstore\fR is controlled with the `\-rcache' |
---|
301 | and `\-wcache' switches, which define the policy for reading from, |
---|
302 | and writing to, the cache, respectively. One of four policies may be |
---|
303 | specified: \*(lqpublic\*(rq, indicating that \fImhstore\fR should make use |
---|
304 | of a publically-accessible content cache; \*(lqprivate\*(rq, indicating |
---|
305 | that \fImhstore\fR should make use of the user's private content cache; |
---|
306 | \*(lqnever\*(rq, indicating that \fImhstore\fR should never make use of |
---|
307 | caching; and, \*(lqask\*(rq, indicating that \fImhstore\fR should ask |
---|
308 | the user. |
---|
309 | |
---|
310 | There are two directories where contents may be cached: the profile entry |
---|
311 | \fBnmh-cache\fR names a directory containing world-readable contents, and, |
---|
312 | the profile entry \fBnmh-private-cache\fR names a directory containing |
---|
313 | private contents. The former should be an absolute (rooted) directory |
---|
314 | name. |
---|
315 | .ne 6 |
---|
316 | For example, |
---|
317 | .sp |
---|
318 | .in +.5i |
---|
319 | nmh-cache: /tmp |
---|
320 | .in -.5i |
---|
321 | .sp |
---|
322 | might be used if you didn't care that the cache got wiped after each |
---|
323 | reboot of the system. The latter is interpreted relative to the user's |
---|
324 | nmh directory, if not rooted, |
---|
325 | .ne 6 |
---|
326 | e.g., |
---|
327 | .sp |
---|
328 | .in +.5i |
---|
329 | nmh-private-cache: .cache |
---|
330 | .in -.5i |
---|
331 | .sp |
---|
332 | (which is the default value). |
---|
333 | |
---|
334 | .Uh "User Environment" |
---|
335 | Because the environment in which \fImhstore\fR operates may vary |
---|
336 | for different machines, \fImhstore\fR will look for the environment |
---|
337 | variable \fB$MHSTORE\fR. If present, this specifies the name of |
---|
338 | an additional user profile which should be read. Hence, when a |
---|
339 | user logs in on a machine, this environment variable should be set |
---|
340 | to refer to a file containing definitions useful for that machine. |
---|
341 | Finally, \fImhstore\fR will attempt to consult one other additional |
---|
342 | user profile, |
---|
343 | .ne 6 |
---|
344 | e.g., |
---|
345 | .sp |
---|
346 | .in +.5i |
---|
347 | %etcdir%/mhn.defaults |
---|
348 | .in -.5i |
---|
349 | .sp |
---|
350 | which is created automatically during nmh installation. |
---|
351 | .Fi |
---|
352 | ^$HOME/\&.mh\(ruprofile~^The user profile |
---|
353 | ^$MHSTORE~^Additional profile entries |
---|
354 | ^%etcdir%/mhn.defaults~^System default MIME profile entries |
---|
355 | .Pr |
---|
356 | ^Path:~^To determine the user's nmh directory |
---|
357 | .Ps |
---|
358 | ^Current\-Folder:~^To find the default current folder |
---|
359 | .Ps |
---|
360 | ^nmh-access-ftp:~^Program to retrieve contents via FTP |
---|
361 | .Ps |
---|
362 | ^nmh-cache~^Public directory to store cached external contents |
---|
363 | .Ps |
---|
364 | ^nmh-private-cache~^Personal directory to store cached external contents |
---|
365 | .Ps |
---|
366 | ^nmh-storage~^Directory to store contents |
---|
367 | .Ps |
---|
368 | ^mhstore-store-<type>*~^Template for storing contents |
---|
369 | .Sa |
---|
370 | mhbuild(1), mhlist(1), mhshow(1), sendfiles(1) |
---|
371 | .br |
---|
372 | RFC\-2045: |
---|
373 | .br |
---|
374 | \fIMultipurpose Internet Mail Extensions (MIME) Part One: |
---|
375 | .br |
---|
376 | Format of Internet Message Bodies\fR, |
---|
377 | .br |
---|
378 | RFC\-2046: |
---|
379 | .br |
---|
380 | \fIMultipurpose Internet Mail Extensions (MIME) Part Two: |
---|
381 | .br |
---|
382 | Media Types\fR, |
---|
383 | .br |
---|
384 | RFC\-2047: |
---|
385 | .br |
---|
386 | \fIMultipurpose Internet Mail Extensions (MIME) Part Three: |
---|
387 | .br |
---|
388 | Message Header Extensions for Non-ASCII Text\fR, |
---|
389 | .br |
---|
390 | RFC\-2048: |
---|
391 | .br |
---|
392 | \fIMultipurpose Internet Mail Extensions (MIME) Part Four: |
---|
393 | .br |
---|
394 | Registration Procedures\fR, |
---|
395 | .br |
---|
396 | RFC\-2049: |
---|
397 | .br |
---|
398 | \fIMultipurpose Internet Mail Extensions (MIME) Part Five: |
---|
399 | .br |
---|
400 | Conformance Criteria and Examples\fR. |
---|
401 | .De |
---|
402 | `+folder' defaults to the current folder |
---|
403 | .Ds |
---|
404 | `msgs' defaults to cur |
---|
405 | .Ds |
---|
406 | `\-noauto' |
---|
407 | .Ds |
---|
408 | `\-nocheck' |
---|
409 | .Ds |
---|
410 | `\-rcache ask' |
---|
411 | .Ds |
---|
412 | `\-wcache ask' |
---|
413 | .Ds |
---|
414 | `\-noverbose' |
---|
415 | .Co |
---|
416 | If a folder is given, it will become the current folder. The last |
---|
417 | message selected will become the current message. |
---|
418 | .Bu |
---|
419 | Partial messages contained within a multipart content are not reassembled. |
---|
420 | .En |
---|