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,
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";
try also moving the $pop->quit(); out of the loop
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.
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)<
Processing user philip1 with password XXXXXX
Net::POP3=GLOB(0x19b5554)>
Net::POP3=GLOB(0x19b5554)<
Net::POP3=GLOB(0x19b5554)>
Net::POP3=GLOB(0x19b5554)<
Net::POP3=GLOB(0x19b5554)>
Net::POP3=GLOB(0x19b5554)<
Net::POP3=GLOB(0x19b5554)>
Net::POP3=GLOB(0x19b5554)<
Account has 0 messages.
Net::POP3=GLOB(0x19b5554)>
Net::POP3=GLOB(0x19b5554)<
Net::POP3=GLOB(0x19b5554)>
Net::POP3=GLOB(0x19b5554)<
Processing user philip2 with password XXXXX
Could not log in: Bad file descriptor at script.txt line 24, <FILE> line 2.
ASKER
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.
Processing user philip2 with password XXXXX
Net::POP3=GLOB(0x19b4f5c)>
Net::POP3=GLOB(0x19b4f5c)<
Could not log in: at script3.txt line 24, <FILE> line 2.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Bravo!
Thank you very much!!!
Thank you very much!!!
Usually that error happens when the socket was closed.
Try:
Open in new window