### CMail::In::imaps
# module for checking for messages in imap mailboxes over SSL
package CMail::In::imaps;
use strict;
BEGIN {
use CMail::In::imap;
use vars qw($VERSION @ISA);
$VERSION = do { my @r = (q$Revision: 1.1 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
@ISA = qw( CMail::In::imap );
}
use IO::Socket::SSL 0.91;
use vars qw(%connections %cmdnum);
# For keeping the connection cache, so we don't have to reconnect multiple
# times if we're checking multiple mailboxes on the same IMAP server
%connections = ();
# internal methods
# connect_login($host,$port,$user,$pass) - opens a socket to the given
# host and port and returns it. If someone wants to implement SSL, I
# suggest overloading just this function, if that's all that's required.
sub connect_login {
my $self = shift;
my $host = shift;
my $port = shift || '993';
my $user = shift;
my $pass = shift;
my $id = "$host:$port:$user";
if (defined $connections{$id}) {
$connections{$id}->{usage}++;
return $connections{$id}->{socket};
}
my $socket = IO::Socket::SSL->new("$host\:$port");
if ( not defined $socket ) {
die "imaps: couldn't open socket to $host:$port: $!\n";
}
$connections{$id} = {
'socket' => $socket,
'usage' => 1,
};
my $answer = $self->send_cmd($socket,"LOGIN $user $pass");
if ( $answer =~ /BAD|NO/ ) {
die "imap: couldn't login to $host: $answer\n";
}
return $socket;
}
1;
syntax highlighted by Code2HTML, v. 0.9.1