13 $_ = $entity->head->as_string();#original_text;
17 s/^([^ \t].*(\n[ \t]+.*)*)$/<field>\n$1\n<\/field
>/gm
;
19 s/\r\n<\/field>/<\
/field>/gm;
21 print "</header>\r\n";
26 my $preamble = $entity->preamble;
28 print "<preamble>\r\n";
29 foreach (@
$preamble) {
39 print "</preamble>\r\n";
44 my $epilogue = $entity->epilogue;
46 print "<epilogue>\r\n";
47 foreach (@
$epilogue) {
57 print "</epilogue>\r\n";
61 my ($entity, $decode, $prefix, $id) = @_;
66 my ($type, $subtype) = split('/', $entity->head->mime_type);
67 my @parts = $entity->parts;
68 if (@parts) { # multipart...
70 if ($type =~ /^message$/i) {
71 print "<message>\r\n";
72 dump_entity
($parts[0], $decode, $prefix, $id . "_1");
73 print "</message>\r\n";
75 print "<multipart>\r\n";
76 dump_preamble
($entity);
78 foreach $i (0 .. $#parts) {
79 print "<body-part>\r\n";
80 dump_entity
($parts[$i], $decode, $prefix, $id . "_" . ($i+1));
81 print "</body-part>\r\n";
83 dump_epilogue
($entity);
84 print "</multipart>\r\n";
89 my $body = $entity->bodyhandle;
92 $file = "$prefix" . "_" . "$id";
93 if ($type eq "text") {
94 $file = $file . ".txt";
97 $file = $file . ".bin";
101 print "<$tag name=\"" . basename
($file) . "\"/>\r\n";
102 if (defined($body)) {
103 open(OUT
, ">" . $file);
108 if (defined($body)) {
110 # Check if the body contains an embedded message encoded using base64 or qp
112 if ($type =~ /^message$/i) {
113 print "<message>\r\n";
115 my $new_parser = new MIME
::Parser
;
116 $new_parser->extract_uuencode(0);
117 $new_parser->extract_encoded_messages(0);
119 # Do the base64 or qp decoding manually
121 if ($entity->head->mime_encoding eq "base64") {
122 $decoded = decode_base64
($body->as_string);
124 $decoded = decode_qp
($body->as_string);
126 open(IN
, '<', \
$decoded);
127 my $new_entity = $new_parser->read(\
*IN
) or die "couldn't parse MIME stream";
128 dump_entity
($new_entity, $decode, $prefix, $id . "_1");
130 print "</message>\r\n";
134 $_ = $body->as_string;
139 s/([^\r])\n/$1\r\n/g;
140 print "<body>\r\n$_</body>\r\n";
151 if (defined($ARGV[0])) {
152 if ($ARGV[0] eq "-decode") {
158 if (defined($ARGV[0])) {
162 !$decode or defined($file) and $file ne "" or die "specifiy a file name prefix";
164 if (defined($file) and $file ne "") {
165 open(XMLOUT
, ">" . $file . ".xml");
169 uninstall MIME
::Decoder
'x-uu', 'x-uuencode', 'x-gzip64';
171 uninstall MIME
::Decoder
'base64', 'quoted-printable';
174 # Create a new MIME parser:
175 $parser = new MIME
::Parser
;
176 $parser->extract_uuencode(0);
177 #$parser->output_to_core(1);
178 $parser->extract_encoded_messages(0);
180 # Read the MIME message:
181 $entity = $parser->read(\
*STDIN
) or die "couldn't parse MIME stream";
183 print "<message>\r\n";
184 dump_entity
($entity, $decode, $file, "1");
185 print "</message>\r\n";