App-wsgetmail
view release on metacpan or search on metacpan
lib/App/wsgetmail.pm view on Meta::CPAN
=head2 mda
An instance of L<App::wsgetmail::MDA> created from our C<config> object.
=cut
has mda => (
is => 'rw',
lazy => 1,
handles => [ qw(forward) ],
builder => '_build_mda'
);
=head2 client_class
The name of the App::wsgetmail package used to construct the
C<client>. Default C<MS365>.
=cut
has client_class => (
is => 'ro',
default => sub { 'MS365' }
);
=head2 client
An instance of the C<client_class> created from our C<config> object.
=cut
has client => (
is => 'ro',
lazy => 1,
handles => [ qw( get_next_message
get_message_mime_content
mark_message_as_read
delete_message) ],
builder => '_build_client'
);
has _post_fetch_action => (
is => 'ro',
lazy => 1,
builder => '_build__post_fetch_action'
);
sub _build__post_fetch_action {
my $self = shift;
my $fetched_action_method;
my $action = $self->config->{action_on_fetched};
return undef unless (defined $action);
if (lc($action) eq 'mark_as_read') {
$fetched_action_method = 'mark_message_as_read';
} elsif ( lc($action) eq "delete" ) {
$fetched_action_method = 'delete_message';
} else {
$fetched_action_method = undef;
warn "no recognised action for fetched mail, mailbox not updated";
}
return $fetched_action_method;
}
=head1 METHODS
=head2 process_message($message)
Given a Message object, retrieves the full message content, delivers it
using the C<mda>, and then executes the configured post-fetch
action. Returns a boolean indicating success.
=cut
sub process_message {
my ($self, $message) = @_;
my $client = $self->client;
my $filename = $client->get_message_mime_content($message->id);
if (not defined $filename) {
warn "failed to get mime content for message ". $message->id;
return 0;
}
elsif (not $filename) {
# failure, but handled silently
return 1;
}
my $ok = $self->forward($message, $filename);
if ($ok) {
$ok = $self->post_fetch_action($message);
}
if ($self->config->{dump_messages}) {
warn "dumped message in file $filename" if ($self->config->{debug});
}
else {
unlink $filename or warn "couldn't delete message file $filename : $!";
}
return $ok;
}
=head2 post_fetch_action($message)
Given a Message object, executes the configured post-fetch action. Returns a
boolean indicating success.
=cut
sub post_fetch_action {
my ($self, $message) = @_;
my $method = $self->_post_fetch_action;
my $ok = 1;
# check for dry-run option
if ($self->config->{dry_run}) {
warn "dry run so not running $method action on fetched mail";
return 1;
}
if ($method) {
$ok = $self->$method($message->id);
}
return $ok;
}
( run in 0.507 second using v1.01-cache-2.11-cpan-f56aa216473 )