To find size of an attachment in a POP3 server

To find size of an attachment in a POP3 server

am 05.09.2007 11:48:32 von chinnari.kaddi

Hi all,

I am trying to retrieve all the attachments from a POP3 server. But
before retrieving I would like to get the size of the attachment and
compare it with the available disk space in my local station and then
retrieve. Can anyone suggest me how to find the size of an attachment?
I am able to find the available disk space using File::Find. Plz find
my script below :

#!/usr/bin/perl

use Carp;
use Email::MIME;
use File::Basename;
use Net::POP3;
use File::Find;

my $server = '192.168.100.254';
my $receiveruname = 'admin';
my $password = 'admin';
my $attachment_dir = 'D:\\Attachments\\';

my $pop = Net::POP3->new($server);
croak "Couldn't connect to the server.\n\n" unless $pop;
my $num_messages = $pop->login( $receiveruname, $password );
croak "Connection trouble network password user ..."
unless defined $num_messages;

for my $i ( 1 .. $num_messages ) {

my $aref = $pop->get($i);
my $em = Email::MIME->new( join '', @$aref );

for ( my @parts = $em->parts ) {
print $_->content_type, "\n";
next unless $_->content_type =~ m(^application/octet-stream)i;
my $filename = basename( $_->filename || '' );
my $basefilename = $filename || 'UNNAMED';

my $filesize = -s "$filename" ;
print "\nFilesize of $filename = $filesize
\n";

if ( $filename eq "null" ) {
$pop->delete($i); # To avoid
downloading file "null" of 0KB
}
else {
open my $fh, ">", "$attachment_dir/
$filename" or croak $!;
binmode $fh;
print $fh $_->body;
$pop->delete($i);
}

}
}

$pop->quit;

Re: To find size of an attachment in a POP3 server

am 05.09.2007 13:54:11 von Dummy

satyakm79@gmail.com wrote:
>
> I am trying to retrieve all the attachments from a POP3 server. But
> before retrieving I would like to get the size of the attachment and
> compare it with the available disk space in my local station and then
> retrieve.

It can't be done. You can get the size of the email message before retrieving it:

perldoc Net::POP3
[ snip ]
list ( [ MSGNUM ] )
If called with an argument the "list" returns the size of the message
in octets.

If called without arguments a reference to a hash is returned. The
keys will be the "MSGNUM"’s of all undeleted messages and the values
will be their size in octets.


But attachments can be encoded/compressed/encrypted which can change the size
of the original file.

> Can anyone suggest me how to find the size of an attachment?

Download it, unencode it, uncompress it and then you will have its size.

Or there may be headers with the attachment that describe the file size so you
have to at least read enough of the message to get all of the headers (if you
trust that the file sizes in the headers are correct.) [Think DOS attack.]



John
--
Perl isn't a toolbox, but a small machine shop where you
can special-order certain sorts of tools at low cost and
in short order. -- Larry Wall