#!/usr/bin/perl use MIME::Parser; use MIME::Base64; srand; $parser = new MIME::Parser; $foldername = time().int(rand(10)).int(rand(10)).int(rand(10)).int(rand(10)).int(rand(10)); mkdir("/var/smtp/my/recv/".$foldername); $parser->output_dir("/var/smtp/my/recv/".$foldername); $parser->tmp_dir("/var/smtp/tmp"); $returnentity = eval{$parser->parse(\*STDIN);}; @writetofile = dump_entity($returnentity); open(INDEXFILE, ">/var/smtp/my/recv/".$foldername."/mailindex.txt"); flock(INDEXFILE,2); print INDEXFILE @writetofile; close(INDEXFILE); sub dump_entity { my ($entity) = @_; my @filedata = (); my @parts = $entity->parts; if (@parts) { my $i; foreach $i (0 .. $#parts) { push(@filedata, dump_entity($parts[$i])); } } else { my $filepath = $entity->bodyhandle->path; $filepath =~ s/^(.*)\/([^\/]*)$/$2/si; $filepath = encode_base64($filepath); $filepath =~ s/\n//sgi; $filepath =~ s/\r//sgi; $filepath =~ s/\t//sgi; my $fileid = encode_base64($entity->head->get('content-id')); $fileid =~ s/\n//sgi; $fileid =~ s/\r//sgi; $fileid =~ s/\t//sgi; my $filetype = encode_base64($entity->head->mime_type); $filetype =~ s/\n//sgi; $filetype =~ s/\r//sgi; $filetype =~ s/\t//sgi; push(@filedata, $filepath."::".$fileid."::".$filetype."\n"); } return @filedata; }