Net-IMAP-Client

 view release on metacpan or  search on metacpan

META.json  view on Meta::CPAN

      "configure" : {
         "requires" : {
            "ExtUtils::MakeMaker" : "0"
         }
      },
      "runtime" : {
         "requires" : {
            "Encode" : "0",
            "Encode::MIME::Header" : "0",
            "IO::Socket::INET" : "0",
            "IO::Socket::SSL" : "0",
            "List::MoreUtils" : "0",
            "List::Util" : "0",
            "Test::More" : "0"
         }
      }
   },
   "release_status" : "stable",
   "version" : "0.9507"
}

META.yml  view on Meta::CPAN

  version: '1.4'
name: Net-IMAP-Client
no_index:
  directory:
    - t
    - inc
requires:
  Encode: '0'
  Encode::MIME::Header: '0'
  IO::Socket::INET: '0'
  IO::Socket::SSL: '0'
  List::MoreUtils: '0'
  List::Util: '0'
  Test::More: '0'
version: '0.9507'

Makefile.PL  view on Meta::CPAN


WriteMakefile(
    NAME                => 'Net::IMAP::Client',
    AUTHOR              => 'Mihai Bazon <mihai.bazon@gmail.com>',
    VERSION_FROM        => 'lib/Net/IMAP/Client.pm',
    ABSTRACT_FROM       => 'lib/Net/IMAP/Client.pm',
    PL_FILES            => {},
    PREREQ_PM => {
        'Test::More'           => 0,
        'IO::Socket::INET'     => 0,
        'IO::Socket::SSL'      => 0,
        'List::Util'           => 0,
        'List::MoreUtils'      => 0,
        'Encode'               => 0,
        'Encode::MIME::Header' => 0,
    },
    dist                => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', },
    clean               => { FILES => 'Net-IMAP-Client-*' },
);

lib/Net/IMAP/Client.pm  view on Meta::CPAN


use vars qw[$VERSION];
$VERSION = '0.9507';

use strict;
use warnings;

use List::Util qw( min max first );
use List::MoreUtils qw( each_array );
use IO::Socket::INET ();
use IO::Socket::SSL ();
use Socket qw( SO_KEEPALIVE );

use Net::IMAP::Client::MsgSummary ();

our $READ_BUFFER = 4096;
my %UID_COMMANDS = map { $_ => 1 } qw( COPY FETCH STORE SEARCH SORT THREAD );
my %DEFAULT_ARGS = (
    uid_mode => 1,
    timeout  => 90,
    server   => '127.0.0.1',

lib/Net/IMAP/Client.pm  view on Meta::CPAN

    my ($self) = @_;
    return $self->{server};
}

sub _get_ssl_config {
    my ($self) = @_;
    if (!$self->{ssl_verify_peer}
         || !$self->{ssl_ca_path}
         && !$self->{ssl_ca_file}
         && $^O ne 'linux') {
        return SSL_verify_mode => IO::Socket::SSL::SSL_VERIFY_NONE;
    }

    my %ssl_config = ( SSL_verify_mode => IO::Socket::SSL::SSL_VERIFY_PEER );

    if ($^O eq 'linux' && !$self->{ssl_ca_path} && !$self->{ssl_ca_file}) {
        $ssl_config{SSL_ca_path} = 
			-d '/etc/ssl/certs/' ? '/etc/ssl/certs/' : '/etc/pki/tls/certs/'; 

		-d $ssl_config{SSL_ca_path} 
			or die "$ssl_config{SSL_ca_path}: SSL certification directory not found";
    }
    $ssl_config{SSL_ca_path} = $self->{ssl_ca_path} if $self->{ssl_ca_path};
    $ssl_config{SSL_ca_file} = $self->{ssl_ca_file} if $self->{ssl_ca_file};

    return %ssl_config;
}
sub _get_socket {
    my ($self) = @_;

    my $socket = $self->{socket};
    return $socket if (defined($socket) and ($socket->isa('IO::Socket::SSL')or $socket->isa('IO::Socket::INET')));

    $self->{socket} = ($self->{ssl} ? 'IO::Socket::SSL' : 'IO::Socket::INET')->new(
			( ( %{$self->{ssl_options}} ) x !!$self->{ssl} ), 
                PeerAddr => $self->_get_server,
                PeerPort => $self->_get_port,
                Timeout  => $self->_get_timeout,
                Proto    => 'tcp',
                Blocking => 1,
                $self->_get_ssl_config,
            ) or die "failed connect or ssl handshake: $!,$IO::Socket::SSL::SSL_ERROR";
    $self->{socket}->sockopt(SO_KEEPALIVE, 1);

    $self->{greeting} = $self->_socket_getline; # get the initial greeting

    $self->_starttls if ($self->{tls});         # upgrade to TLS if needed

    return $self->{socket};
}

sub _starttls {

lib/Net/IMAP/Client.pm  view on Meta::CPAN

        $can_do_starttls ||= 1 if ($line =~ /^\*\s+CAPABILITY.*\s+STARTTLS/);
    } else {
        die "IMAP server failed CAPABILITY query"
    }
    die "IMAP server does not have STARTTLS capability" unless ($can_do_starttls);

    # request STARTTLS
    ($ok, $lines) = $self->_tell_imap('STARTTLS');
    if ($ok) {
        my @sni_args;
        push(@sni_args, SSL_hostname => $self->_get_server) if (IO::Socket::SSL->can_client_sni());
        IO::Socket::SSL->start_SSL(
            $self->{socket},
            $self->_get_ssl_config,
            @sni_args,
        ) or die $IO::Socket::SSL::SSL_ERROR;
    } else {
        die "IMAP server failed STARTTLS command"
    }

    return $self->{socket};
}

sub _get_next_id {
    return ++$_[0]->{_cmd_id};
}

lib/Net/IMAP/Client.pm  view on Meta::CPAN

=item - B<user> (STRING)

User ID (I<only "clear" login is supported for now!>)

=item - B<pass> (STRING)

Password

=item - B<ssl> (BOOL, optional, default FALSE)

Pass a true value if you want to use L<IO::Socket::SSL>
You may not set both C<ssl> and C<tls> at the same time.

=item - B<tls> (BOOL, optional, default FALSE)

Pass a true value if you want to use connect without SSL and then use
C<STARTTLS> to upgrade the connection to an encrypted session using
L<IO::Socket::SSL>.  The other C<ssl_*> options also apply.

You may not set both C<ssl> and C<tls> at the same time.

=item - B<ssl_verify_peer> (BOOL, optional, default TRUE)

Pass a false value if you do not want to use SSL CA to verify server

only need when you set ssl to true

=item - B<ssl_ca_file> (STRING, optional)

lib/Net/IMAP/Client.pm  view on Meta::CPAN

Pass a dir which will be used as CA file search dir, found CA file
will be used to verify server

On linux, by default is '/etc/ssl/certs/'

at least one of ssl_ca_file and ssl_ca_path is needed for ssl verify
 server

=item - B<ssl_options> (HASHREF, optional)

Optional arguments to be passed to the L<IO::Socket::SSL> object.

=item - B<uid_mode> (BOOL, optional, default TRUE)

Whether to use UID command (see RFC3501).  Recommended.

=item - B<socket> (IO::Handle, optional)

If you already have a socket connected to the IMAP server, you can
pass it here.



( run in 0.289 second using v1.01-cache-2.11-cpan-05444aca049 )