MiDgArD:
Based on that error message, I'd guess that either $msg doesn't contain a message at all (i.e., perhaps the line "$msg=$pop->Retrieve(1);" failed), or that it's in the wrong format. (The docs for Mail::POP3Client doesn't seem to tell what format the Retrieve method returns, but the docs for Mail::Message::Attachment::Stripper states that it wants the message in Mail::Message format.)
I'd suggest:
1) Using strict and warnings at the start of your program.
2) putting in a bit of error-checking, specifically checking to see if the Retrieve method fails, and whether it returns a properly formatted message...
I hope this helps...
--roboticus
| [reply] [d/l] |
NEW CODE:
#!/usr/bin/perl
my $homedir='/home/celflog/www/teste';
use strict;
use Mail::POP3Client;
use IO::File;
use Mail::Message::Attachment::Stripper;
my $pop = new Mail::POP3Client(
USER => 'myuser',
PASSWORD => "mypass",
HOST => "mail.server.com"
);
my $msg=$pop->Retrieve(1), or die "$_\n";
print "$msg";
my $m = Mail::Message::Attachment::Stripper->new($msg);
my @attachments = $m->attachments;
foreach my $a(@attachments) {
next if $a->{content_type} !~ /jpeg|jpg/i;
# Ignore invalids attached files
my $f = new IO::File "$homedir" . $a->{filename}, "w" or die "Can not create file!";
print $f $a->{payload};
}
He continue showing: Need a message at teste.cgi line 25
| [reply] |
Hi MiDgArD,
According to the documentation, Mail::Pop3Client::Retrieve gives you the head and body of an email message, and Mail::Message::Attachment::Stripper expects a Mail::Message object in it's constructor.
You could try taking the $msg you get from Retrieve and constructing/building a Mail::Message object, like so:
...
You know, I started reading through the documentation but realized it would take me a bit more time to fully understand it, and extract the bits I would need in order to help you with your task.
I will recommend instead that you read the associated documentation that I have referenced above, and take the hints I allude to above (construct, build) to find the relevant documentation for your task of converting your message into a Mail::Messsage object. Otherwise, I would be inclined to use something I'm a bit more familiar with (or at least can state that I've used it before ;-) and give you a link for another way to carry out your task using Mime::Parser, with working code that strips jpeg attachments off of emails, though not coming through pop3 interface. That was written a long time ago, when I was first learning Mime::Parser, and thus has TONS of debugging output littered through the code. Perhaps this approach will be easier for you?
--chargrill
s**lil*; $*=join'',sort split q**; s;.*;grr; &&s+(.(.)).+$2$1+; $; =
qq-$_-;s,.*,ahc,;$,.=chop for split q,,,reverse;print for($,,$;,$*,$/)
| [reply] [d/l] [select] |