.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{ . if \nF \{ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "Explode 3pm" .TH Explode 3pm "2011-06-26" "perl v5.20.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" MIME::Explode \- Perl extension for explode MIME messages .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 1 \& use MIME::Explode; \& \& my $explode = MIME::Explode\->new( \& output_dir => "tmp", \& mkdir => 0755, \& decode_subject => 1, \& check_content_type => 1, \& content_types => ["image/gif", "image/jpeg", "image/bmp"], \& types_action => "exclude" \& ); \& \& print "Number of messages: ", $explode\->nmsgs, "\en"; \& \& open(MAIL, "file.tmp") \& or die("Couldn\*(Aqt open file.tmp for writing: $!\en"); \& my $headers = $explode\->parse(\e*MAIL, \e*OUTPUT); \& close(OUTPUT); \& close(MAIL); \& \& for my $part (sort{ $a cmp $b } keys(%{$headers})) { \& for my $k (keys(%{$headers\->{$part}})) { \& if(ref($headers\->{$part}\->{$k}) eq "ARRAY") { \& for my $i (0 .. $#{$headers\->{$part}\->{$k}}) { \& print "$part => $k => $i => ", $headers\->{$part}\->{$k}\->[$i], "\en"; \& } \& } elsif(ref($headers\->{$part}\->{$k}) eq "HASH") { \& for my $ks (keys(%{$headers\->{$part}\->{$k}})) { \& if(ref($headers\->{$part}\->{$k}\->{$ks}) eq "ARRAY") { \& print "$part => $k => $ks => ", join(($ks eq "charset") ? " " : "", @{$headers\->{$part}\->{$k}\->{$ks}}), "\en"; \& } else { \& print "$part => $k => $ks => ", $headers\->{$part}\->{$k}\->{$ks}, "\en"; \& } \& print "$part => $k => $ks => ", $headers\->{$part}\->{$k}\->{$ks}, "\en"; \& } \& } else { \& print "$part => $k => ", $headers\->{$part}\->{$k}, "\en"; \& } \& } \& } \& \& if(my $e = $explode\->clean_all()) { \& print "Error: $e\en"; \& } .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" MIME::Explode is perl module for parsing and decoding single or multipart \&\s-1MIME\s0 messages, and outputting its decoded components to a given directory ie, this module is designed to allows users to extract the attached files out of a \s-1MIME\s0 encoded email messages or mailboxes. .SH "METHODS" .IX Header "METHODS" .SS "new([, \s-1OPTION ...\s0])" .IX Subsection "new([, OPTION ...])" This method create a new MIME::Explode object. The following keys are available: .IP "output_dir" 7 .IX Item "output_dir" Directory where the decoded files are placed .IP "mkdir => octal_number" 7 .IX Item "mkdir => octal_number" If the value is set to octal number then make the output_dir directory (example: mkdir => 0755). .IP "check_content_type => 0 or 1" 7 .IX Item "check_content_type => 0 or 1" If the value is set to 1 the content-type of file is checked .IP "decode_subject => 0 or 1" 7 .IX Item "decode_subject => 0 or 1" If the value is set to 1 then the subject is decoded into a list. .Sp .Vb 3 \& $header\->{\*(Aq0.0\*(Aq}\->{subject}\->{value} = [ARRAYREF]; \& $header\->{\*(Aq0.0\*(Aq}\->{subject}\->{charset} = [ARRAYREF]; \& $subject = join("", @{$header\->{\*(Aq0.0\*(Aq}\->{subject}\->{value}}); .Ve .IP "exclude_types => [\s-1ARRAYREF\s0]" 7 .IX Item "exclude_types => [ARRAYREF]" Not save files with specified content types (deprecated in next versions) .IP "content_types => [\s-1ARRAYREF\s0]" 7 .IX Item "content_types => [ARRAYREF]" Array reference with content types for \*(L"include\*(R" or \*(L"exclude\*(R" .ie n .IP "types_action => ""include"" or ""exclude""" 7 .el .IP "types_action => ``include'' or ``exclude''" 7 .IX Item "types_action => include or exclude" If the action is a \*(L"include\*(R", all attached files with specified content types are saved but if the action is a \*(L"exclude\*(R", no files are saved except if its in the array of content types. If no array is specified, but the action is a \*(L"include\*(R", all attached files are saved, otherwise all files are removed if action is a \*(L"exclude\*(R". The default action is \&\*(L"include\*(R". .SS "parse(\s-1FILEHANDLE, FILEHANDLE\s0)" .IX Subsection "parse(FILEHANDLE, FILEHANDLE)" This method parse the stream and splits it into its component entities. This method return a hash reference with all parts. The \s-1FILEHANDLE\s0 should be a reference to a \s-1GLOB.\s0 The second argument is optional. .SS "nmsgs" .IX Subsection "nmsgs" Returns the number of parsed messages. .SS "clean_all" .IX Subsection "clean_all" Cleans all files from the \*(L"output_dir\*(R" directory and then removes the directory. If an error happens returns it. .SH "AUTHOR" .IX Header "AUTHOR" Henrique Dias .SH "CREDITS" .IX Header "CREDITS" Thanks to Rui Castro for the revision. .SH "SEE ALSO" .IX Header "SEE ALSO" MIME::Tools, \fIperl\fR\|(1).