libnet
view release on metacpan or search on metacpan
lib/Net/POP3.pm view on Meta::CPAN
# Net::POP3.pm
#
# Copyright (C) 1995-2004 Graham Barr. All rights reserved.
# Copyright (C) 2013-2016, 2020 Steve Hay. All rights reserved.
# This module is free software; you can redistribute it and/or modify it under
# the same terms as Perl itself, i.e. under the terms of either the GNU General
# Public License or the Artistic License, as specified in the F<LICENCE> file.
package Net::POP3;
use 5.008001;
use strict;
use warnings;
use Carp;
use IO::Socket;
use Net::Cmd;
use Net::Config;
our $VERSION = "3.15";
# Code for detecting if we can use SSL
my $ssl_class = eval {
require IO::Socket::SSL;
# first version with default CA on most platforms
no warnings 'numeric';
IO::Socket::SSL->VERSION(2.007);
} && 'IO::Socket::SSL';
my $nossl_warn = !$ssl_class &&
'To use SSL please install IO::Socket::SSL with version>=2.007';
# Code for detecting if we can use IPv6
my $family_key = 'Domain';
my $inet6_class = eval {
require IO::Socket::IP;
no warnings 'numeric';
IO::Socket::IP->VERSION(0.25) || die;
$family_key = 'Family';
} && 'IO::Socket::IP' || eval {
require IO::Socket::INET6;
no warnings 'numeric';
IO::Socket::INET6->VERSION(2.62);
} && 'IO::Socket::INET6';
sub can_ssl { $ssl_class };
sub can_inet6 { $inet6_class };
our @ISA = ('Net::Cmd', $inet6_class || 'IO::Socket::INET');
sub new {
my $self = shift;
my $type = ref($self) || $self;
my ($host, %arg);
if (@_ % 2) {
$host = shift;
%arg = @_;
}
else {
%arg = @_;
$host = delete $arg{Host};
}
my $hosts = defined $host ? [$host] : $NetConfig{pop3_hosts};
my $obj;
if ($arg{SSL}) {
# SSL from start
die $nossl_warn if !$ssl_class;
$arg{Port} ||= 995;
}
$arg{Timeout} = 120 if ! defined $arg{Timeout};
foreach my $h (@{$hosts}) {
$obj = $type->SUPER::new(
PeerAddr => ($host = $h),
PeerPort => $arg{Port} || 'pop3(110)',
Proto => 'tcp',
$family_key => $arg{Domain} || $arg{Family},
LocalAddr => $arg{LocalAddr},
LocalPort => exists($arg{ResvPort}) ? $arg{ResvPort} : $arg{LocalPort},
Timeout => $arg{Timeout},
)
and last;
}
return
unless defined $obj;
${*$obj}{'net_pop3_arg'} = \%arg;
${*$obj}{'net_pop3_host'} = $host;
if ($arg{SSL}) {
Net::POP3::_SSL->start_SSL($obj,%arg) or return;
}
$obj->autoflush(1);
$obj->debug(exists $arg{Debug} ? $arg{Debug} : undef);
unless ($obj->response() == CMD_OK) {
$obj->close();
return;
}
${*$obj}{'net_pop3_banner'} = $obj->message;
$obj;
}
lib/Net/POP3.pm view on Meta::CPAN
read from the server.
=item C<list([$msgnum])>
If called with an argument the C<list> returns the size of the message
in octets.
If called without arguments a reference to a hash is returned. The
keys will be the C<$msgnum>'s of all undeleted messages and the values will
be their size in octets.
=item C<get($msgnum[, $fh])>
Get the message C<$msgnum> from the remote mailbox. If C<$fh> is not given
then get returns a reference to an array which contains the lines of
text read from the server. If C<$fh> is given then the lines returned
from the server are printed to the filehandle C<$fh>.
=item C<getfh($msgnum)>
As per get(), but returns a tied filehandle. Reading from this
filehandle returns the requested message. The filehandle will return
EOF at the end of the message and should not be reused.
=item C<last()>
Returns the highest C<$msgnum> of all the messages accessed.
=item C<popstat()>
Returns a list of two elements. These are the number of undeleted
elements and the size of the mbox in octets.
=item C<ping($user)>
Returns a list of two elements. These are the number of new messages
and the total number of messages for C<$user>.
=item C<uidl([$msgnum])>
Returns a unique identifier for C<$msgnum> if given. If C<$msgnum> is not
given C<uidl> returns a reference to a hash where the keys are the
message numbers and the values are the unique identifiers.
=item C<delete($msgnum)>
Mark message C<$msgnum> to be deleted from the remote mailbox. All messages
that are marked to be deleted will be removed from the remote mailbox
when the server connection closed.
=item C<reset()>
Reset the status of the remote POP3 server. This includes resetting the
status of all messages to not be deleted.
=item C<quit()>
Quit and close the connection to the remote POP3 server. Any messages marked
as deleted will be deleted from the remote mailbox.
=item C<can_inet6()>
Returns whether we can use IPv6.
=item C<can_ssl()>
Returns whether we can use SSL.
=back
=head2 Notes
If a C<Net::POP3> object goes out of scope before C<quit> method is called
then the C<reset> method will called before the connection is closed. This
means that any messages marked to be deleted will not be.
=head1 EXPORTS
I<None>.
=head1 KNOWN BUGS
See L<https://rt.cpan.org/Dist/Display.html?Status=Active&Queue=libnet>.
=head1 SEE ALSO
L<Net::Netrc>,
L<Net::Cmd>,
L<IO::Socket::SSL>.
=head1 AUTHOR
Graham Barr E<lt>L<gbarr@pobox.com|mailto:gbarr@pobox.com>E<gt>.
Steve Hay E<lt>L<shay@cpan.org|mailto:shay@cpan.org>E<gt> is now maintaining
libnet as of version 1.22_02.
=head1 COPYRIGHT
Copyright (C) 1995-2004 Graham Barr. All rights reserved.
Copyright (C) 2013-2016, 2020 Steve Hay. All rights reserved.
=head1 LICENCE
This module is free software; you can redistribute it and/or modify it under the
same terms as Perl itself, i.e. under the terms of either the GNU General Public
License or the Artistic License, as specified in the F<LICENCE> file.
=head1 VERSION
Version 3.15
=head1 DATE
20 March 2023
=head1 HISTORY
See the F<Changes> file.
( run in 0.675 second using v1.01-cache-2.11-cpan-39bf76dae61 )