m0skit0 has asked for the wisdom of the Perl Monks concerning the following question:

This Mail::IMAPClient->new() freezes in Windows 7:

sub connectGMail { my $client = Mail::IMAPClient->new ( Server => 'imap.gmail.com', Port => 993, Ssl => 1, User => 'whateverUser', Password => 'aG00dP455w0rd', Socket => IO::Socket::SSL->new ( SSL_verify_mode => SSL_VERIFY_NONE ) ) or die "Cannot connect ($@)\n"; return $client; }

I tried deactivating Windows firewall, but nothing changed. A very similar code works fine in Linux:

sub connectGMail { my $client = Mail::IMAPClient->new ( Server => 'imap.gmail.com', Port => 993, Ssl => 1, User => 'whateverUser', Password => 'aG00dP455w0rd' ) or die "Cannot connect ($@)\n"; return $client; }

In both cases Mail::IMAPClient was installed fine from CPAN repositories, but in Windows, if I don't include the Socket option, it shows me this warning

******************************************************************* Using the default of SSL_verify_mode of SSL_VERIFY_NONE for client is deprecated! Please set SSL_verify_mode to SSL_VERIFY_PEER together with SSL_ca_file|SSL_ca_path for verification. If you really don't want to verify the certificate and keep the connection open to Man-In-The-Middle attacks please set SSL_verify_mode explicitly to SSL_VERIFY_NONE in your application. *******************************************************************

and the rest of the script (which parses the emails) won't work correctly.

Thanks in advance!

Replies are listed 'Best First'.
Re: Mail::IMAPClient->new hangs in Windows
by Khen1950fx (Canon) on Mar 25, 2013 at 22:13 UTC
    For Windows, try SSLv2; also, SSL_verify_none is the default, so why write it longhand?
    #!/usr/bin/perl use strict; use warnings; use IO::Socket::SSL; use Mail::IMAPClient; my $client = Mail::IMAPClient->new( Server => 'imap.gmail.com', Port => 993, Ssl => 1, User => 'whateverUser', Password => 'aG00dP455w0rd', Socket => IO::Socket::SSL->new( Proto => 'tcp', PeerAddr => 'imap.gmail.com', PeerPort => '993', SSL_version => 'SSLv3', SSL_verify_mode => 0), ); die $! unless print "Connected\n";
    Updated: Fixed typo.
      Thanks for the reply. I already solved this.
      sub connectGMail { my $socket = IO::Socket::SSL->new( PeerAddr => 'imap.gmail.com', PeerPort => 993, SSL_verify_mode => SSL_VERIFY_NONE ) or die "socket(): $@"; my $client = Mail::IMAPClient->new ( User => 'whateverUser', Password => 'aG00dP455w0rd', Ssl => 1, Socket => $socket ) or die "Cannot connect ($@)\n"; return $client; }
      And yes, I have to explicitly specify the verify mode, otherwise it spits a warning message.