#!/usr/bin/perl use vars qw( %entry ); use DBI; use MIME::Parser; use MIME::Words qw( decode_mimewords); use Date::Manip qw( ParseDate UnixDate DateCalc); use Data::Dumper; use Unicode::String qw(latin1 utf8); use MIME::QuotedPrint; my $mediaDir = '/servers/sites/blog.karlus.net/docs/media/'; ## grab email text my $parser = new MIME::Parser; $parser->output_to_core(1); $parser->output_dir('/tmp'); ## bail out if bum! my $ent; eval { $ent = $parser->parse(\*STDIN) }; exit (100) if $@; # print Dumper($parser->results); # $ent->dump_skeleton; ## attempts to remove sig (very nice) $ent->remove_sig(5); ## headers my $head = $ent->head; $entry{subject} = decode_mimewords($head->get('Subject')); $entry{date} = UnixDate(DateCalc(ParseDate($head->get('Date')), "+1 hour"), "%Y-%m-%d %H:%M:%S"); #$entry{date} = UnixDate(ParseDate($head->get('Date')), "%Y-%m-%d %H:%M:%S"); ## get source $entry{source} = $head->get('X-Mailer') =~ m/EPOC Email/ig ? '1' : '0'; $entry{source} = $head->get('From') =~ m/mms\.mytmn\.pt/ig ? '1' : '0'; ## change upload dir if mobile source $mediaDir .= 'mobile/' if $entry{source} == 1; ## scan parts if ($ent->parts) { foreach my $e ($ent->parts) { if ($e->mime_type eq 'text/plain') { if ($e->head->mime_encoding =~ /7bit/i) { $entry{body} = latin1(utf8(decode_qp($e->bodyhandle->as_string))); } elsif ($e->head->mime_attr('content-type.charset') =~ /utf-8/i) { $entry{body} = latin1(utf8(decode_qp($e->bodyhandle->as_string))); } else { $entry{body} = decode_mimewords($e->bodyhandle->as_string); } next; } if ($e->mime_type =~ /^image/) { $handle = $e->bodyhandle; my $file = decode_mimewords($e->head->recommended_filename) || time; umask(0222); if (open (FH, "> $mediaDir/$file")) { $handle->print(\*FH); close (FH); $handle->purge; push(@{$entry{file}}, $file); } else { exit(100); } next; } } } else { if ($ent->mime_type =~ /^text/) { $entry{body} = decode_mimewords($ent->body_as_string); } } #print Dumper(\%entry); #die(); ## insert into db # (...)