Link to home
Start Free TrialLog in
Avatar of rckit2000
rckit2000

asked on

PERL Script results in error

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

Avatar of mrjoltcola
mrjoltcola
Flag of United States of America image

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

Avatar of ozo
try also moving the  $pop->quit(); out of the loop
Avatar of rckit2000
rckit2000

ASKER

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.
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.
ASKER CERTIFIED SOLUTION
Avatar of Adam314
Adam314

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Bravo!

Thank you very much!!!