Hello Monks,
I am a newbie in Perl and Linux (Mandrake 9.0 to be exact) and have been set the challenge of writing a script to attach an image to an e-mail message, and then extract the image from message at the other end and store in the
/home/me/webtest/mail/attachments/
folder.
simplemail.pl
#!/usr/bin/perl -w
use MIME::Entity;
#######################
#
# Define the varibles for the test
#
########################
$toAddress ='me@localhost';
$fromAddress ='me@localhost';
$Subject ="Some Random Subject";
$message = ["<B>This is a test message</B> that <i>witters</i> on abou
+t some random stuff<br>\n",
"Why? I dunno, i guess it just feels like doing so<br>\n",
"Anyway it's doing no harm is it?<br>\n",
"<a href=\"http://www.someurl.com\">Somewebsite</a>"];
$aFileName = "someimage.gif";
$aType = "image/gif";
$aEncoding = "-SUGGEST";
###############################
#
# The Donkey Work Part.....
#
################################
## Create the top-level, and set up the mail headers:
$top = MIME::Entity->build(Type => "text/html",
From => $fromAddress,
To => $toAddress,
Subject => $Subject,
Data => $message);
## for plaine text e-mail change Type to "text/plain",
# Attach a Signature....
$top->attach(Path=>"signature.txt",
Disposition => "inline",
Encoding => "8bit");
# Attach the Image....
$top->attach(Path => $aFileName,
Type => $aType,
Encoding => $aEncoding,
Disposition => "attachment");
# Send the message
open (MAIL,"|/usr/sbin/sendmail -t -oi");
$top->print(\*MAIL);
close MAIL;
This above code covers part one adaquetly and displays correctly in Evolution(Mandrake 9) and OE(Win98).
Looking round the perlmonks site i found this
strip.pl
use MIME::Parser;
sub read_email {
my $dir = "/home/me/webtest/mail/attachments";
my $url = "http://127.0.0.1/mail/attachments";
my $parser = new MIME::Parser;
$parser->output_dir($dir);
my $entity = $parser->read(\*STDIN) || die "couldn't parse MIME stre
+am";
my $head = $entity->head;
my $content = $head->as_string . "\n";
my @parts = $entity->parts;
my $body = $entity->bodyhandle;
$content .= $body->as_string if defined $body;
my $part;
for $part (@parts) {
my $path = ($part->bodyhandle) ? $part->bodyhandle->path : undef;
if ($path =~ /msg-\d+.*\.doc/) {
open(IN, $path) || warn "Couldn't open $path\n";
local $/ = undef;
$content .= <IN> . "\n";
close IN;
unlink ($path) || warn "Couldn't unlink $path\n";
}
else {
my $file = $path;
$file =~ s/$dir//o;
$content .= "\n--\nSaved attachment: $url$file\n--\n"; }
}
return $content;
}
which from what I could asertain should do the job.
I guess it needs to be called from Konsole with the following
perl strip.pl
It run's okay with no error messages, however nothing happens, i am confused.
I have managed to install procmail and metamail (after finally sussing out that by csh it meant tcsh for the dependancy) if they would make my life easier.
I would only want .gif .png .jpg and .jpeg files extracted.