1use strict;
2use warnings;
3package Email::Folder::POP3;
4{
5  $Email::Folder::POP3::VERSION = '1.015';
6}
7# ABSTRACT: Email::Folder Access to POP3 Folders
8
9our $POP3    ||= 'Net::POP3';
10
11use parent qw[Email::Folder::Reader];
12use Net::POP3;
13use URI;
14
15sub _uri {
16    my $self = shift;
17    return $self->{_uri} ||= URI->new($self->{_file});
18}
19
20sub _server {
21    my $self = shift;
22    return $self->{_server} if $self->{_server};
23
24    my $uri  = $self->_uri;
25    my $host = $uri->host;
26    my $port = $uri->port || 110;
27    my $server = $POP3->new($host, Port => $port, Timeout => 60)
28       or die("Net::POP3->new('$host', Port => $port, Timeout => 60): $!");
29
30    my ($user, $pass) = @{$self}{qw[username password]};
31    ($user, $pass) = split ':', $uri->userinfo, 2 unless $user;
32
33    $server->login($user, $pass) if $user;
34
35    $self->{_next} = 1;
36    return $self->{_server} = $server;
37}
38
39sub next_message {
40    my $self = shift;
41    my $message = $self->_server->get($self->{_next});
42    if ( $message ) {
43        ++$self->{_next};
44        return join '', @{$message};
45    }
46    $self->{_next} = 1;
47    return;
48}
49
501;
51
52__END__
53
54=pod
55
56=encoding UTF-8
57
58=head1 NAME
59
60Email::Folder::POP3 - Email::Folder Access to POP3 Folders
61
62=head1 VERSION
63
64version 1.015
65
66=head1 SYNOPSIS
67
68  use Email::Folder;
69  use Email::FolderType::Net;
70
71  my $folder = Email::Folder->new('pop://user:pass@example.com:110');
72
73  print $_->header('Subject') for $folder->messages;
74
75=head1 DESCRIPTION
76
77This software adds POP3 functionality to L<Email::Folder|Email::Folder>.
78Its interface is identical to the other
79L<Email::Folder::Reader|Email::Folder::Reader> subclasses.
80
81=head2 Parameters
82
83C<username> and C<password> parameters may be sent to C<new()>. If
84used, they override any user info passed in the connection URI.
85
86=head1 SEE ALSO
87
88L<Email::Folder>,
89L<Email::Folder::Reader>,
90L<Email::FolderType::Net>,
91L<URI::pop>,
92L<Net::POP3>.
93
94=head1 AUTHOR
95
96GomoR <netpkt@gomor.org>
97
98=head1 COPYRIGHT AND LICENSE
99
100This software is copyright (c) 2004 by GomoR <netpkt@gomor.org>.
101
102This is free software; you can redistribute it and/or modify it under
103the same terms as the Perl 5 programming language system itself.
104
105=cut
106