Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

PERL Script results in error

Posted on 2009-04-09
6
Medium Priority
?
432 Views
Last Modified: 2012-05-06
Hello-

I am trying to run a script that logs into a pop3 server multiple times using a text file with usernames and passwords. The purpose of this is to migrate user accounts from an IMAIL server to a MailEnable server via an IMAP connector.

urgoll has provided the script below, but when it is run I get an error that says:
Bad file descriptor at script.txt line 24, <FILE> line 2

C:\>perl script.txt input.txt
Processing user philip1 with password password1
   Account has 27 messages.
Processing user philip2 with password password2
Could not log in: Bad file descriptor at script.txt line 24, <FILE> line 2.

I have just installed the most recent version of ActivePerl on WIndows XP.

The input file looks like this:

philip1 password1
philip2 password2
philip3 password3
...

Any thoughts on how to resolve this issue?

THank you,
#!/usr/bin/perl
 
use strict;
use Net::POP3;
 
# Replace following line with the actual server name for the POP3 service
my $servername = 'rt.accovia.com';
 
my $filename = shift;
if (!$filename || $filename eq '') { 
	print "Usage: script.pl <inputfilename>\n",
	      "   where <inputfilename> is a text file with username and passwords for the POP accounts.\n\n";
	exit(1);
}
 
 
my $pop = Net::POP3->new($servername, Timeout => 120);	# define server with 2 minutes timeout
 
open (FILE,$filename) or die "Cannot open input file";
 
while (<FILE>) {
	if ($_ =~ /^\s*(\S+)\s+(\S+).*/ ) {
		print "Processing user ",$1," with password ",$2,"\n";
		$pop->login($1,$2) or die "Could not log in: $!";
		my $msgnums = $pop->list or die "Could not get msg list: $!";
		my $cnt = keys %$msgnums || 0;
		print "   Account has $cnt messages.\n";
		$pop->reset();
		$pop->quit();
	} else {
		print "Line didn't match expected values:\n";
		print $_;
	}
}
close(FILE);
print "Done processing input file\n";

Open in new window

0
Comment
Question by:rckit2000
6 Comments
 
LVL 40

Expert Comment

by:mrjoltcola
ID: 24109233
Try turning debugging on.
Usually that error happens when the socket was closed.

Try:
my $pop = Net::POP3->new($servername, Timeout => 120, Debug=> 1);

Open in new window

0
 
LVL 85

Expert Comment

by:ozo
ID: 24109323
try also moving the  $pop->quit(); out of the loop
0
 

Author Comment

by:rckit2000
ID: 24109355
Thanks - I turned on debug as you suggested and this is the result: Also, I switched the accounts around in the input file adn got the identical result..

C:\>perl script.txt input2.txt
Net::POP3>>> Net::POP3(2.29)
Net::POP3>>>   Net::Cmd(2.29)
Net::POP3>>>     Exporter(5.62)
Net::POP3>>>   IO::Socket::INET(1.31)
Net::POP3>>>     IO::Socket(1.30_01)
Net::POP3>>>       IO::Handle(1.27)
Net::POP3=GLOB(0x19b5554)<<< +OK X1 Greetings!  
Processing user philip1 with password XXXXXX
Net::POP3=GLOB(0x19b5554)>>> USER philip1
Net::POP3=GLOB(0x19b5554)<<< +OK send your password
Net::POP3=GLOB(0x19b5554)>>> PASS ....
Net::POP3=GLOB(0x19b5554)<<< +OK maildrop locked and ready
Net::POP3=GLOB(0x19b5554)>>> STAT
Net::POP3=GLOB(0x19b5554)<<< +OK 0 0
Net::POP3=GLOB(0x19b5554)>>> LIST
Net::POP3=GLOB(0x19b5554)<<< +OK 0 messages (0 octets)
   Account has 0 messages.
Net::POP3=GLOB(0x19b5554)>>> RSET
Net::POP3=GLOB(0x19b5554)<<< +OK 0
Net::POP3=GLOB(0x19b5554)>>> QUIT
Net::POP3=GLOB(0x19b5554)<<< +OK POP3 Server saying Good-Bye
Processing user philip2 with password XXXXX
Could not log in: Bad file descriptor at script.txt line 24, <FILE> line 2.
0
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 

Author Comment

by:rckit2000
ID: 24109396
I removed the quit statement and got the following result after teh first account was successful the second login failed:

Processing user philip2 with password XXXXX
Net::POP3=GLOB(0x19b4f5c)>>> USER philip1
Net::POP3=GLOB(0x19b4f5c)<<< -ERR Not in authorization state
Could not log in:  at script3.txt line 24, <FILE> line 2.
0
 
LVL 39

Accepted Solution

by:
Adam314 earned 2000 total points
ID: 24109488

 
open (FILE,$filename) or die "Cannot open input file";
 
while (<FILE>) {
    if ($_ =~ /^\s*(\S+)\s+(\S+).*/ ) {
        print "Processing user ",$1," with password ",$2,"\n";
        my $pop = Net::POP3->new($servername, Timeout => 120);
        $pop->login($1,$2) or die "Could not log in: $!";
        my $msgnums = $pop->list or die "Could not get msg list: $!";
        my $cnt = keys %$msgnums || 0;
        print "   Account has $cnt messages.\n";
        $pop->reset();
        $pop->quit();
    }
    else {
        print "Line didn't match expected values:\n";
        print $_;
    }
}
close(FILE);

Open in new window

0
 

Author Closing Comment

by:rckit2000
ID: 31568703
Bravo!

Thank you very much!!!
0

Featured Post

Fill in the form and get your FREE NFR key NOW!

Veeam is happy to provide a FREE NFR server license to certified engineers, trainers, and bloggers.  It allows for the non‑production use of Veeam Agent for Microsoft Windows. This license is valid for five workstations and two servers.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This process describes the steps required to Import and Export data from and to .pst files using Exchange 2010. We can use these steps to export data from a user to a .pst file, import data back to the same or a different user, or even import data t…
One-stop solution for Exchange Administrators to address all MS Exchange Server issues, which is known by the name of Stellar Exchange Toolkit.
To show how to generate a certificate request in Exchange 2013. We show this process by using the Exchange Admin Center. Log into Exchange Admin Center.:  First we need to log into the Exchange Admin Center. Navigate to the Servers >> Certificates…
In this Micro Video tutorial you will learn the basics about Database Availability Groups and How to configure one using a live Exchange Server Environment. The video tutorial explains the basics of the Exchange server Database Availability grou…

963 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question