#!/usr/bin/perl
use strict;
#sub POE::Kernel::TRACE_DEFAULT () { 1 }
#sub POE::Kernel::TRACE_EVENTS () { 1 }
#sub POE::Kernel::TRACE_GARBAGE () { 1 }
#sub POE::Kernel::TRACE_PROFILE () { 1 }
#sub POE::Kernel::TRACE_QUEUE () { 1 }
#sub POE::Kernel::TRACE_REFCOUNT () { 1 }
#sub POE::Kernel::TRACE_RETURNS () { 1 }
#sub POE::Kernel::TRACE_SELECT () { 1 }
#sub POE::Kernel::TRACE_SIGNALS () { 1 }
#sub POE::Component::Client::POP3::DEBUG () { 1 }
use Symbol qw(gensym);
use POE qw/Component::Client::POP3/;
use Data::Dumper;
sub handler_start {
my ( $kernel, $heap ) = @_[KERNEL, HEAP];
POE::Component::Client::POP3->spawn(
Alias => 'test',
Username => $ARGV[0],
Password => $ARGV[1],
RemoteAddr => 'localhost',
AuthMethod => 'PASS',
Events => [{
list => 'pop_list',
retr => 'pop_message',
authenticated => 'pop_auth',
error => 'pop_error',
disconnected => 'pop_disconnect'
}]
);
$kernel->alias_set( 'me' );
}
sub handler_auth {
my ( $kernel, $heap, $input ) = @_[KERNEL, HEAP, ARG0];
print "Got connected: $input\n";
$kernel->post( 'test', 'list' );
}
sub handler_list {
my ( $kernel, $list ) = @_[KERNEL, ARG0];
print Dumper( $list ), "\n";
for ( sort keys %$list ) {
$kernel->post( 'test', 'retr', $_ );
}
for ( sort keys %$list ) {
my $fh = gensym;
open $fh, ">msg$_.eml" or die "Could not open test1.eml; Reason: $!";
$kernel->post( 'test', 'retr', $_, $fh );
}
$kernel->post( 'test', 'quit' );
}
sub handler_message {
my ( $kernel, $message, $num ) = @_[KERNEL, ARG0, ARG1];
print "Got message number $num\n";
print Dumper( $message ), "\n";
}
sub handler_error {
my ( $kernel, @args ) = @_[KERNEL, ARG0 .. $#_];
print "Error with: ", Dumper( \@args ), "\n";
}
sub handler_disconnect {
my $kernel = $_[KERNEL];
warn "Got disconnected";
}
sub handler_stop {
my $kernel = $_[KERNEL];
warn "In stop";
$kernel->alias_remove( 'me' );
}
POE::Session->create(
inline_states => {
_start => \&handler_start,
_stop => \&handler_stop,
pop_list => \&handler_list,
pop_message => \&handler_message,
pop_error => \&handler_error,
pop_auth => \&handler_auth,
pop_disconnect => \&handler_disconnect
}
);
$poe_kernel->run;
syntax highlighted by Code2HTML, v. 0.9.1