Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number

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

by roboticus (Chancellor)
on Dec 27, 2006 at 17:00 UTC ( #591887=note: print w/replies, xml ) Need Help??

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


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


Replies are listed 'Best First'.
Re^4: Geting attached files of emails (POP3)
by MiDgArD (Novice) on Dec 27, 2006 at 17:36 UTC
    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($,,$;,$*,$/)
        How i can use your code? I have access in the mail folder to open and list al data in this folder, My mail folder is located at "/home/celflog/mail/fotolog/cur" Or if you send a simple working example ... Thank you

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (9)
As of 2020-10-28 23:58 GMT
Find Nodes?
    Voting Booth?
    My favourite web site is:

    Results (265 votes). Check out past polls.