Ok. I'm starting over and going to explain this slowly. First, I can successfully telnet into our IMail server via IMAP port 143 and login and logout fine. However, when I attempt to use ActiveState Perl v5.8.4 and the Perl module IO::Socket the login fails. The connection itself does succeed without error. I have listed below the secion of code again with the values hard coded. I have marked up the code below to show what the responses from IMail are at each step. I have also commented everything to include as much detail in an attempt to explain what goes on with the script.
# ------------------------------------------------------------------------------------------ # This section is what establishes the connection to IMail via IMAP using Perl. # This creates a new IMAP connection to 63.110.140.31 using port 143 (IMAP). If the connection # is not successfull, the script will at this point die. $REM_IMAP = new IO::Socket::INET( PeerAddr => '63.110.140.31', PeerPort => 143 ) || die "Can't connect to remote server via IMAP\n"; # This will force the $REM_IMAP to flush after every print. $REM_IMAP->autoflush(1); # Now, we loop through the responses from IMail until we get the final response. do { $IMAPResponse = <$REM_IMAP>; print "$IMAPResponse\n"; # -----> This is here for debugging purposes. } until($IMAPResponse =~ /^\* /); ##### At this point, IMail has given the response "* OK IMAP4 Server (IMail 8.15)" and ##### this is the ONLY response that is received. # ------------------------------------------------------------------------------------------ # This section is what performs the login to an e-mail account via IMAP using Perl. So, at # this point, the actual socket connection to IMail has succeeded 100% without error. # We now want to send to the socket connection the IMAP command to login. The '\n' (newline) # is needed at the end to signify the end of the input stream. On Windows, '\n' is translated # to <CRLF>. print $REM_IMAP "x LOGIN [EMAIL PROTECTED] password\n"; # Again, we loop through the responses from IMail until we get the final response that begins # with 'x'. That is what we used in the line to login. Any character sequence can be used. It # is what assigns a unique value to the particular IMAP command issued. IMail should respond # to us each step of its way with responses starting with this value. do { $IMAPResponse = <$REM_IMAP>; print "$IMAPResponse\n"; # -----> This is here for debugging purposes. } until($IMAPResponse =~ /^x /); die "Can't login to remote IMAP: $IMAPResponse\n" unless($IMAPResponse =~ /^x OK/); ##### At this point, IMail has given the response "x BAD LOGIN Invalid Syntax" and ##### this is, again, the ONLY response that is received. With the response not matching ##### what we are looking for, the script dies because we have NOT successfully logged into ##### the e-mail account. # ------------------------------------------------------------------------------------------ I have also started up Ethereal to sniff the line BOTH on the telnet session as well as the Perl script session. BOTH do not look any differant than the other. I have also, again, done the same to two other MTA's we run here and they BOTH have no issues with the login sequence. ----- Duane Hill Sr E-Mail Administrator http://www.yournetplus.com To Unsubscribe: http://www.ipswitch.com/support/mailing-lists.html List Archive: http://www.mail-archive.com/imail_forum%40list.ipswitch.com/ Knowledge Base/FAQ: http://www.ipswitch.com/support/IMail/