Mail-Box-POP3

 view release on metacpan or  search on metacpan

lib/Mail/Box/POP3.pm  view on Meta::CPAN


sub foundIn(@)
{	my $self = shift;
	unshift @_, 'folder' if @_ % 2;
	my %args = @_;

	   (exists $args{type}   && lc $args{type} eq 'pop3')
	|| (exists $args{folder} && $args{folder} =~ m/^pop/);
}


sub addMessage($)
{	my ($self, $message) = @_;

	error __x"you cannot write a message to a pop server (yet)"
		if defined $message;

	undef;
}


sub addMessages(@)
{	my $self = shift;

	# error message described in addMessage()
	error __x"you cannot write messages to a pop server (yet)"
		if @_;

	();
}

sub type() {'pop3'}

sub close(@)
{	my $self = shift;

	$self->SUPER::close(@_);

	my $pop = delete $self->{MBP_client};
	$pop->disconnect if defined $pop;

	$self;
}


sub delete(@)
{	my $self = shift;
	warning __x"POP3 folders cannot be deleted.";
	undef;
}


sub listSubFolders(@) { () }     # no


sub openSubFolder($@) { undef }  # fails

sub topFolderWithMessages() { 1 }  # Yes: only top folder


sub update() { $_[0]->notImplemented }

#--------------------

sub popClient(%)
{	my ($self, %args) = @_;

	return $self->{MBP_client}
		if defined $self->{MBP_client};

	my $auth = $self->{auth};

	require Mail::Transport::POP3;
	my $client  = Mail::Transport::POP3->new(
		username     => $self->{MBN_username},
		password     => $self->{MBN_password},
		hostname     => $self->{MBN_hostname},
		port         => $self->{MBN_port},
		authenticate => $self->{MBP_auth},
		use_ssl      => $args{use_ssl} || $self->{MBP_use_ssl},
		ssl_options  => $args{ssl_options} || $self->{MBP_ssl_opts}
	)
		or error __x"cannot create POP3 client for {name}.", name => $self->name;

	$self->{MBP_client} = $client;
}

sub readMessages(@)
{	my ($self, %args) = @_;

	my $pop   = $self->popClient or return;
	my $seqnr = 0;

	foreach my $id ($pop->ids)
	{	my $message = $args{message_type}->new(
			head      => $args{head_delayed_type}->new,
			unique    => $id,
			folder    => $self,
			seqnr     => $seqnr++
		);

		my $body = $args{body_delayed_type}->new(message => $message);
		$message->storeBody($body);
		$self->storeMessage($message);
	}

	$self;
}


sub getHead($)
{	my ($self, $message) = @_;
	my $pop   = $self->popClient or return;

	my $uidl  = $message->unique;
	my $lines = $pop->header($uidl);

	unless(defined $lines)
	{	$lines = [];
		warning __x"message {id} disappeared from POP3 server {name}.", id => $uidl, name => $self->name;
	}



( run in 2.852 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )