1Mail::Message::Body(3)User Contributed Perl DocumentationMail::Message::Body(3)
2
3
4
6 Mail::Message::Body - the data of a body in a message
7
9 Mail::Message::Body has extra code in
10 Mail::Message::Body::Construct
11 Mail::Message::Body::Encode
12
13 Mail::Message::Body
14 is a Mail::Reporter
15
16 Mail::Message::Body is extended by
17 Mail::Message::Body::File
18 Mail::Message::Body::Lines
19 Mail::Message::Body::Multipart
20 Mail::Message::Body::Nested
21 Mail::Message::Body::String
22
23 Mail::Message::Body is realized by
24 Mail::Message::Body::Delayed
25
27 my Mail::Message $msg = ...;
28 my $body = $msg->body;
29 my @text = $body->lines;
30 my $text = $body->string;
31 my IO::Handle $file = $body->file;
32 $body->print(\*FILE);
33
34 my $content_type = $body->type;
35 my $transfer_encoding = $body->transferEncoding;
36 my $encoded = $body->encode(mime_type => 'text/html',
37 charset => 'us-ascii', transfer_encoding => 'none');\n";
38 my $decoded = $body->decoded;
39
41 The encoding and decoding functionality of a Mail::Message::Body is
42 implemented in the Mail::Message::Body::Encode package. That package
43 is automatically loaded when encoding and decoding of messages needs to
44 take place. Methods to simply build an process body objects are imple‐
45 mented in Mail::Message::Body::Construct.
46
47 The body of a message (a Mail::Message object) is stored in one of the
48 many body types. The functionality of each body type is equivalent,
49 but there are performance differences. Each body type has its own doc‐
50 umentation with details about its implementation.
51
53 overload: ""
54
55 (stringification) Returns the body as string --which will trigger
56 completion-- unless called to produce a string for "Carp". The
57 latter to avoid deep recursions.
58
59 Example: stringification of body
60
61 print $msg->body; # implicit by print
62
63 my $body = $msg->body;
64 my $x = "$body"; # explicit by interpolation
65
66 overload: '==' and '!='
67
68 (numeric comparison) compares if two references point to the same
69 message. This only produces correct results is both arguments are
70 message references within the same folder.
71
72 Example: use of numeric comparison on a body
73
74 my $skip = $folder->message(3);
75 foreach my $msg (@$folder)
76 { next if $msg == $skip;
77 $msg->send;
78 }
79
80 overload: @{}
81
82 When a body object is used as being an array reference, the lines
83 of the body are returned. This is the same as using lines().
84
85 Example: using a body as array
86
87 print $body->lines->[1]; # second line
88 print $body->[1]; # same
89
90 my @lines = $body->lines;
91 my @lines = @$body; # same
92
93 overload: bool
94
95 Always returns a true value, which is needed to have overloaded
96 objects to be used as in "if($body)". Otherwise, "if(defined
97 $body)" would be needed to avoid a runtime error.
98
100 Constructors
101
102 $obj->clone
103
104 Return a copy of this body, usually to be included in a cloned mes‐
105 sage. Use Mail::Message::clone() for a whole message.
106
107 Mail::Message::Body->new(OPTIONS)
108
109 BE WARNED that, what you specify here are encodings and such which
110 are already in place. The options will not trigger conversions.
111 When you need conversions, first create a body with options which
112 tell what you've got, and then call encode() for what you need.
113
114 Option --Defined in --Default
115 based_on undef
116 charset 'us-ascii'
117 checked <false>
118 data undef
119 description undef
120 disposition undef
121 eol 'NATIVE'
122 file undef
123 log Mail::Reporter 'WARNINGS'
124 message undef
125 mime_type 'text/plain'
126 modified <false>
127 trace Mail::Reporter 'WARNINGS'
128 transfer_encoding 'none'
129
130 . based_on BODY
131
132 The information about encodings must be taken from the speci‐
133 fied BODY, unless specified differently.
134
135 . charset STRING
136
137 Defines the character-set which is used in the data. Only use‐
138 ful in combination with a "mime_type" which refers to "text" in
139 any shape. This field is case-insensitive.
140
141 . checked BOOLEAN
142
143 Whether the added information has been check not to contain
144 illegal octets with respect to the transfer encoding and mime
145 type. If not checked, and then set as body for a message, it
146 will be.
147
148 . data ARRAY-OF-LINES ⎪ STRING
149
150 The content of the body. The only way to set the content of a
151 body is during the creation of the body. So if you want to
152 modify the content of a message, you need to create a new body
153 with the new content and add that to the body. The reason
154 behind this, is that correct encodings and body information
155 must be guaranteed. It avoids your hassle in calculating the
156 number of lines in the body, and checking whether bad charac‐
157 ters are enclosed in text.
158
159 Specify a reference to an ARRAY of lines, each terminated by a
160 newline. Or one STRING which may contain multiple lines, sepa‐
161 rated and terminated by a newline.
162
163 . description STRING⎪FIELD
164
165 Informal information about the body content. The data relates
166 to the "Content-Description" field. Specify a STRING which
167 will become the field content, or a real FIELD.
168
169 . disposition STRING⎪FIELD
170
171 How this message can be decomposed. The data relates to the
172 "Content-Disposition" field. Specify a STRING which will
173 become the field content, or a real FIELD.
174
175 The content of this field is specified in RFC 1806. The body
176 of the field can be "inline", to indicate that the body is
177 intended to be displayed automatically upon display of the mes‐
178 sage. Use "attachment" to indicate that they are separate from
179 the main body of the mail message, and that their display
180 should not be automatic, but contingent upon some further
181 action of the user.
182
183 The "filename" attribute specifies a name to which is suggested
184 to the reader of the message when it is extracted.
185
186 . eol 'CR'⎪'LF'⎪'CRLF'⎪'NATIVE'
187
188 Convert the message into having the specified string as line
189 terminator for all lines in the body. "NATIVE" is used to rep‐
190 resent the "\n" on the current platform and will be translated
191 in the applicable one.
192
193 BE WARNED that folders with a non-native encoding may appear on
194 your platform, for instance in Windows folders handled from a
195 UNIX system. The eol encoding has effect on the size of the
196 body!
197
198 . file FILENAME⎪FILEHANDLE⎪IOHANDLE
199
200 Read the data from the specified file, file handle, or object
201 of type "IO::Handle".
202
203 . log LEVEL
204
205 . message MESSAGE
206
207 The message where this body belongs to.
208
209 . mime_type STRING⎪FIELD⎪MIME
210
211 The type of data which is added. You may specify a content of
212 a header line as STRING, or a FIELD object. You may also spec‐
213 ify a MIME::Type object. In any case, it will be kept inter‐
214 nally as a real field (a Mail::Message::Field object). This
215 relates to the "Content-Type" header field.
216
217 A mime-type specification consists of two parts: a general
218 class ("text", "image", "application", etc) and a specific
219 sub-class. Examples for specific classes with "text" are
220 "plain", "html", and "xml". This field is case-insensitive but
221 case preserving. The default mime-type is "text/plain",
222
223 . modified BOOLEAN
224
225 Whether the body is flagged modified, directly from its cre‐
226 ation.
227
228 . trace LEVEL
229
230 . transfer_encoding STRING⎪FIELD
231
232 The encoding that the data has. If the data is to be encoded,
233 than you will have to call encode() after the body is created.
234 That will return a new encoded body. This field is case-insen‐
235 sitive and relates to the "Content-Transfer-Encoding" field in
236 the header.
237
238 Example:
239
240 my $body = Mail::Message::Body::String->new(file => \*IN,
241 mime_type => 'text/html; charset="ISO-8859-1"');
242
243 my $body = Mail::Message::Body::Lines->new(data => ['first', $second],
244 charset => 'ISO-10646', transfer_encoding => 'none');
245
246 my $body = Mail::Message::Body::Lines->new(data => \@lines,
247 transfer_encoding => 'base64');
248
249 my $body = Mail::Message::Body::Lines->new(file => 'picture.gif',
250 mime_type => 'image/gif');
251
252 Constructing a body
253
254 $obj->attach(MESSAGES, OPTIONS)
255
256 See "Constructing a body" in Mail::Message::Body::Construct
257
258 $obj->check
259
260 See "Constructing a body" in Mail::Message::Body::Encode
261
262 $obj->concatenate(COMPONENTS)
263
264 See "Constructing a body" in Mail::Message::Body::Construct
265
266 $obj->decoded(OPTIONS)
267
268 Returns a body, an object which is (a sub-)class of a Mail::Mes‐
269 sage::Body, which contains a simplified representation of textual
270 data. The returned object may be the object where this is called
271 on, but may also be a new body of any type.
272
273 my $dec = $body->decoded;
274
275 is equivalent with
276
277 my $dec = $body->encode(mime_type => 'text/plain', charset => 'us-ascii',
278 transfer_encoding => 'none');
279
280 The $dec which is returned is a body. Ask with the mimeType()
281 method what is produced. This $dec body is not related to a
282 header.
283
284 Option --Default
285 result_type <same as current>
286
287 . result_type CLASS
288
289 $obj->encode(OPTIONS)
290
291 See "Constructing a body" in Mail::Message::Body::Encode
292
293 $obj->encoded
294
295 See "Constructing a body" in Mail::Message::Body::Encode
296
297 $obj->eol(['CR'⎪'LF'⎪'CRLF'⎪'NATIVE'])
298
299 Returns the character (or characters) which are used to separate
300 lines within this body. When a kind of separator is specified, the
301 body is translated to contain the specified line endings.
302
303 $obj->foreachLine(CODE)
304
305 See "Constructing a body" in Mail::Message::Body::Construct
306
307 $obj->stripSignature(OPTIONS)
308
309 See "Constructing a body" in Mail::Message::Body::Construct
310
311 $obj->unify(BODY)
312
313 See "Constructing a body" in Mail::Message::Body::Encode
314
315 The body
316
317 $obj->isDelayed
318
319 Returns a true or false value, depending on whether the body of
320 this message has been read from file. This can only false for a
321 Mail::Message::Body::Delayed.
322
323 $obj->isMultipart
324
325 Returns whether this message-body contains parts which are messages
326 by themselves.
327
328 $obj->isNested
329
330 Only true for a message body which contains exactly one sub-mes‐
331 sage: the "Mail::Message::Body::Nested" body type.
332
333 $obj->message([MESSAGE])
334
335 Returns the message where this body belongs to, optionally setting
336 it to a new MESSAGE first. If "undef" is passed, the body will be
337 disconnected from the message.
338
339 About the payload
340
341 $obj->charset
342
343 Returns the character set which is used in the text body as string.
344 This is part of the result of what the "type" method returns.
345
346 $obj->checked([BOOLEAN])
347
348 Returns whether the body encoding has been checked or not (option‐
349 ally after setting the flag to a new value).
350
351 $obj->description([STRING⎪FIELD])
352
353 Returns (optionally after setting) the informal description of the
354 body content. The related header field is "Content-Description".
355 A Mail::Message::Field object is returned (which stringifies into
356 the field content). The field content will be "none" if no dispo‐
357 sition was specified.
358
359 The argument can be a STRING (which is converted into a field), or
360 a fully prepared header field.
361
362 $obj->disposition([STRING⎪FIELD])
363
364 Returns (optionally after setting) how the message can be disposed
365 (unpacked). The related header field is "Content-Disposition". A
366 Mail::Message::Field object is returned (which stringifies into the
367 field content). The field content will be "none" if no disposition
368 was specified.
369
370 The argument can be a STRING (which is converted into a field), or
371 a fully prepared header field.
372
373 $obj->dispositionFilename([DIRECTORY])
374
375 See "About the payload" in Mail::Message::Body::Encode
376
377 $obj->isBinary
378
379 See "About the payload" in Mail::Message::Body::Encode
380
381 $obj->isText
382
383 See "About the payload" in Mail::Message::Body::Encode
384
385 $obj->mimeType
386
387 Returns a MIME::Type object which is related to this body's type.
388 This differs from the "type" method, which results in a Mail::Mes‐
389 sage::Field.
390
391 Example:
392
393 if($body->mimeType eq 'text/html') {...}
394 print $body->mimeType->simplified;
395
396 $obj->nrLines
397
398 Returns the number of lines in the message body. For multi-part
399 messages, this includes the header lines and boundaries of all the
400 parts.
401
402 $obj->size
403
404 The total number of bytes in the message body. The size of the body
405 is computed in the shape it is in. For example, if this is a base64
406 encoded message, the size of the encoded data is returned; you may
407 want to call Mail::Message::decoded() first.
408
409 $obj->transferEncoding([STRING⎪FIELD])
410
411 Returns the transfer-encoding of the data within this body as
412 Mail::Message::Field (which stringifies to its content). If it
413 needs to be changed, call the encode() or decoded() method. When
414 no encoding is present, the field contains the text "none".
415
416 The optional STRING or FIELD enforces a new encoding to be set,
417 without the actual required translations.
418
419 Example:
420
421 my $transfer = $msg->decoded->transferEncoding;
422 $transfer->print; # --> Content-Encoding: base64
423 print $transfer; # --> base64
424
425 if($msg->body->transferEncoding eq 'none') {...}
426
427 $obj->type([STRING⎪FIELD])
428
429 Returns the type of information the body contains as Mail::Mes‐
430 sage::Field object. The type is taken from the header field "Con‐
431 tent-Type". If the header did not contain that field, then you will
432 get a default field containing "text/plain".
433
434 You usually can better use mimeType(), because that will return a
435 clever object with type information.
436
437 Example:
438
439 my $msg = $folder->message(6);
440 $msg->get('Content-Type')->print;
441 # --> Content-Type: text/plain; charset="us-ascii"
442
443 my $content = $msg->decoded;
444 my $type = $content->type;
445
446 print "This is a $type message\n";
447 # --> This is a text/plain; charset="us-ascii" message
448
449 print "This is a ", $type->body, "message\n";
450 # --> This is a text/plain message
451
452 print "Comment: ", $type->comment, "\n";
453 # --> Comment: charset="us-ascii"
454
455 Access to the payload
456
457 $obj->endsOnNewline
458
459 Returns whether the last line of the body is terminated by a new-
460 line (in transport it will become a CRLF). An empty body will
461 return true as well: the newline comes from the line before it.
462
463 $obj->file
464
465 Return the content of the body as a file handle. The returned
466 stream may be a real file, or a simulated file in any form that
467 Perl supports. While you may not be able to write to the file han‐
468 dle, you can read from it.
469
470 WARNING: Even if the file handle supports writing, do not write to
471 the file handle. If you do, some of the internal values of the
472 Mail::Message::Body may not be updated.
473
474 $obj->lines
475
476 Return the content of the body as a list of lines (in LIST context)
477 or a reference to an array of lines (in SCALAR context). In scalar
478 context the array of lines is cached to avoid needless copying and
479 therefore provide much faster access for large messages.
480
481 To just get the number of lines in the body, use the nrLines()
482 method, which is usually much more efficient.
483
484 BE WARNED: For some types of bodies the reference will refer to the
485 original data. You must not change the referenced data! If you do,
486 some of the essential internal variables of the Mail::Message::Body
487 may not be updated.
488
489 Example:
490
491 my @lines = $body->lines; # copies lines
492 my $line3 = ($body->lines)[3] # only one copy
493 print $lines[0];
494
495 my $linesref = $body->lines; # reference to originals
496 my $line3 = $body->lines->[3] # only one copy (faster)
497 print $linesref->[0];
498
499 print $body->[0]; # by overloading
500
501 $obj->print([FILEHANDLE])
502
503 Print the body to the specified FILEHANDLE (defaults to the
504 selected handle). The handle may be a GLOB, an IO::File object,
505 or... any object with a "print()" method will do. Nothing useful
506 is returned.
507
508 $obj->printEscapedFrom(FILEHANDLE)
509
510 Print the body to the specified FILEHANDLE but all lines which
511 start with 'From ' (optionally already preceded by >'s) will habe
512 an > added in front. Nothing useful is returned.
513
514 $obj->string
515
516 Return the content of the body as a scalar (a single string). This
517 is a copy of the internally kept information.
518
519 Example:
520
521 my $text = $body->string;
522 print "Body: $body\n"; # by overloading
523
524 $obj->stripTrailingNewline
525
526 Remove the newline from the last line, or the last line if it does
527 not contain anything else than a newline.
528
529 $obj->write(OPTIONS)
530
531 Write the content of the body to a file. Be warned that you may
532 want to decode the body before writing it!
533
534 Option --Default
535 filename <required>
536
537 . filename FILENAME
538
539 Example: write the data to a file
540
541 use File::Temp;
542 my $fn = tempfile;
543 $message->decoded->write(filename => $fn)
544 or die "Couldn't write to $fn: $!\n";
545
546 Example: using the content-disposition information to write
547
548 use File::Temp;
549 my $dir = tempdir; mkdir $dir or die;
550 my $fn = $message->body->dispositionFilename($dir);
551 $message->decoded->write(filename => $fn)
552 or die "Couldn't write to $fn: $!\n";
553
554 Internals
555
556 $obj->addTransferEncHandler(NAME, CLASS⎪OBJECT)
557
558 Mail::Message::Body->addTransferEncHandler(NAME, CLASS⎪OBJECT)
559
560 See "Internals" in Mail::Message::Body::Encode
561
562 $obj->contentInfoFrom(HEAD)
563
564 Transfer the body related info from the header into this body.
565
566 $obj->contentInfoTo(HEAD)
567
568 Copy the content information (the "Content-*" fields) into the
569 specified HEAD. The body was created from raw data without the
570 required information, which must be added. See also contentIn‐
571 foFrom().
572
573 $obj->fileLocation([BEGIN,END])
574
575 The location of the body in the file. Returned a list containing
576 begin and end. The begin is the offsets of the first byte if the
577 folder used for this body. The end is the offset of the first byte
578 of the next message.
579
580 $obj->getTransferEncHandler(TYPE)
581
582 See "Internals" in Mail::Message::Body::Encode
583
584 $obj->isModified
585
586 Returns whether the body has changed.
587
588 $obj->load
589
590 Be sure that the body is loaded. This returns the loaded body.
591
592 $obj->modified([BOOLEAN])
593
594 Change the body modification flag. This will force a re-write of
595 the body to a folder file when it is closed. It is quite dangerous
596 to change the body: the same body may be shared between messages
597 within your program.
598
599 Especially be warned that you have to change the message-id when
600 you change the body of the message: no two messages should have the
601 same id.
602
603 Without value, the current setting is returned, although you can
604 better use isModified().
605
606 $obj->moveLocation([DISTANCE])
607
608 Move the registration of the message to a new location over DIS‐
609 TANCE. This is called when the message is written to a new version
610 of the same folder-file.
611
612 $obj->read(PARSER, HEAD, BODYTYPE [,CHARS [,LINES]])
613
614 Read the body with the PARSER from file. The implementation of this
615 method will differ between types of bodies. The BODYTYPE argument
616 is a class name or a code reference of a routine which can produce
617 a class name, and is used in multipart bodies to determine the type
618 of the body for each part.
619
620 The CHARS argument is the estimated number of bytes in the body, or
621 "undef" when this is not known. This data can sometimes be derived
622 from the header (the "Content-Length" line) or file-size.
623
624 The second argument is the estimated number of LINES of the body.
625 It is less useful than the CHARS but may be of help determining
626 whether the message separator is trustworthy. This value may be
627 found in the "Lines" field of the header.
628
629 Error handling
630
631 $obj->AUTOLOAD
632
633 When an unknown method is called on a message body object, this may
634 not be problematic. For performance reasons, some methods are
635 implemented in separate files, and only demand-loaded. If this
636 delayed compilation of additional modules does not help, an error
637 will be produced.
638
639 $obj->addReport(OBJECT)
640
641 See "Error handling" in Mail::Reporter
642
643 $obj->defaultTrace([LEVEL]⎪[LOGLEVEL, TRACELEVEL]⎪[LEVEL, CALLBACK])
644
645 Mail::Message::Body->defaultTrace([LEVEL]⎪[LOGLEVEL,
646 TRACELEVEL]⎪[LEVEL, CALLBACK])
647
648 See "Error handling" in Mail::Reporter
649
650 $obj->errors
651
652 See "Error handling" in Mail::Reporter
653
654 $obj->log([LEVEL [,STRINGS]])
655
656 Mail::Message::Body->log([LEVEL [,STRINGS]])
657
658 See "Error handling" in Mail::Reporter
659
660 $obj->logPriority(LEVEL)
661
662 Mail::Message::Body->logPriority(LEVEL)
663
664 See "Error handling" in Mail::Reporter
665
666 $obj->logSettings
667
668 See "Error handling" in Mail::Reporter
669
670 $obj->notImplemented
671
672 See "Error handling" in Mail::Reporter
673
674 $obj->report([LEVEL])
675
676 See "Error handling" in Mail::Reporter
677
678 $obj->reportAll([LEVEL])
679
680 See "Error handling" in Mail::Reporter
681
682 $obj->trace([LEVEL])
683
684 See "Error handling" in Mail::Reporter
685
686 $obj->warnings
687
688 See "Error handling" in Mail::Reporter
689
690 Cleanup
691
692 $obj->DESTROY
693
694 See "Cleanup" in Mail::Reporter
695
696 $obj->inGlobalDestruction
697
698 See "Cleanup" in Mail::Reporter
699
701 Access to the body
702
703 A body can be contained in a message, but may also live without a mes‐
704 sage. In both cases it stores data, and the same questions can be
705 asked: what type of data it is, how many bytes and lines, what encoding
706 is used. Any body can be encoded and decoded, returning a new body
707 object. However, bodies which are part of a message will always be in
708 a shape that they can be written to a file or send to somewhere: they
709 will be encoded if needed.
710
711 Example:
712
713 my $body = Mail::Message::Body::String->new(mime_type => 'image/gif');
714 $body->print(\*OUT); # this is binary image data...
715
716 my $encoded = $message->body($body);
717 $encoded->print(\*OUT); # ascii data, encoded image
718
719 Now encoded refers to the body of the $message which is the content of
720 $body in a shape that it can be transmitted. Usually "base64" encoding
721 is used.
722
723 Body class implementation
724
725 The body of a message can be stored in many ways. Roughtly, the imple‐
726 mentations can be split in two groups: the data collectors and the com‐
727 plex bodies. The primer implement various ways to access data, and are
728 full compatible: they only differ in performance and memory footprint
729 under different circumstances. The latter are created to handle com‐
730 plex multiparts and lazy extraction.
731
732 Data collector bodies
733
734 * Mail::Message::Body::String
735 The whole message body is stored in one scalar. Small messages can
736 be contained this way without performance penalties.
737
738 * Mail::Message::Body::Lines
739 Each line of the message body is stored as single scalar. This is
740 a useful representation for a detailed look in the message body,
741 which is usually line-organized.
742
743 * Mail::Message::Body::File
744 The message body is stored in an external temporary file. This
745 type of storage is especially useful when the body is large, the
746 total folder is large, or memory is limited.
747
748 * Mail::Message::Body::InFolder
749 NOT IMPLEMENTED YET. The message is kept in the folder, and is
750 only taken out when the content is changed.
751
752 * Mail::Message::Body::External
753 NOT IMPLEMENTED YET. The message is kept in a separate file, usu‐
754 ally because the message body is large. The difference with the
755 "::External" object is that this external storage stays this way
756 between closing and opening of a folder. The "::External" object
757 only uses a file when the folder is open.
758
759 Complex bodies
760
761 * Mail::Message::Body::Delayed
762 The message-body is not yet read, but the exact location of the
763 body is known so the message can be read when needed. This is part
764 of the lazy extraction mechanism. Once extracted, the object can
765 become any simple or complex body.
766
767 * Mail::Message::Body::Multipart
768 The message body contains a set of sub-messages (which can contain
769 multipart bodies themselves). Each sub-message is an instance of
770 Mail::Message::Part, which is an extension of Mail::Message.
771
772 * Mail::Message::Body::Nested
773 Nested messages, like "message/rfc822": they contain a message in
774 the body. For most code, they simply behave like multiparts.
775
777 Warning: No decoder defined for transfer encoding $name.
778
779 The data (message body) is encoded in a way which is not currently
780 understood, therefore no decoding (or recoding) can take place.
781
782 Warning: No encoder defined for transfer encoding $name.
783
784 The data (message body) has been decoded, but the required encoding is
785 unknown. The decoded data is returned.
786
787 Error: Package $package does not implement $method.
788
789 Fatal error: the specific package (or one of its superclasses) does not
790 implement this method where it should. This message means that some
791 other related classes do implement this method however the class at
792 hand does not. Probably you should investigate this and probably
793 inform the author of the package.
794
796 This module is part of Mail-Box distribution version 2.070, built on
797 March 25, 2007. Website: http://perl.overmeer.net/mailbox/
798
800 Copyrights 2001-2007 by Mark Overmeer.For other contributors see
801 ChangeLog.
802
803 This program is free software; you can redistribute it and/or modify it
804 under the same terms as Perl itself. See
805 http://www.perl.com/perl/misc/Artistic.html
806
807
808
809perl v5.8.8 2007-03-25 Mail::Message::Body(3)