Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"

Re^2: Geting attached files of emails (POP3)

by MiDgArD (Novice)
on Dec 27, 2006 at 16:45 UTC ( #591882=note: print w/replies, xml ) Need Help??

in reply to Re: Geting attached files of emails (POP3)
in thread Geting attached files of emails (POP3)

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?
  • Comment on Re^2: Geting attached files of emails (POP3)

Replies are listed 'Best First'.
Re^3: Geting attached files of emails (POP3)
by roboticus (Chancellor) on Dec 27, 2006 at 17:00 UTC

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


      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 => ""

      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

        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?

        s**lil*; $*=join'',sort split q**; s;.*;grr; &&s+(.(.)).+$2$1+; $; = qq-$_-;s,.*,ahc,;$,.=chop for split q,,,reverse;print for($,,$;,$*,$/)

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://591882]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (4)
As of 2019-12-15 15:04 GMT
Find Nodes?
    Voting Booth?

    No recent polls found