MiDgArD has asked for the wisdom of the Perl Monks concerning the following question:

How i can get the attached files of a mail message?


#!/usr/bin/perl $homedir='/home/celflog/www/teste'; use Mail::POP3Client; use IO::File; use Mail::Message::Attachment::Stripper; $pop = new Mail::POP3Client( USER => 'myuser', PASSWORD => "mypass", HOST => "" ); $msg=$pop->Retrieve(1); print "$msg"; $m = Mail::Message::Attachment::Stripper->new($msg); @attachments = $m->attachments; foreach $a(@attachments) { next if $a->{content_type} !~ /jpeg|jpg/i; # Ignore invalids attached files $f = new IO::File "$homedir" . $a->{filename}, "w" or die "Can not +create file!"; print $f $a->{payload}; }
He don't work ...

20061227 Janitored by Corion: Added code tags as per Writeup Formatting Tips

Replies are listed 'Best First'.
Re: Geting attached files of emails (POP3)
by roboticus (Chancellor) on Dec 27, 2006 at 15:48 UTC
      Yes, the message posses a attached file "photo.jpg"
      When I execute he under Shell, he return this:

      Need a message at test.cgi line 23

      Line 23: $m = Mail::Message::Attachment::Stripper->new($msg);

      In the line 14: print "$msg";

      He shown the message as text plain
      Exist another perl module?

        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...