The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package App::MadEye::Plugin::Notify::Email;
use strict;
use warnings;
use base qw/App::MadEye::Plugin::Base/;
use Params::Validate;
use MIME::Lite;
use DateTime;

sub notify : Hook {
    my ($self, $context, $args) = @_;

    my $conf = $self->{config}->{config};
    my $subject   = $conf->{subject} || '%s alert !!!';
    my $from_addr = $conf->{from_addr} or die "missing from_addr";
    my $to_addr   = $conf->{to_addr} or die "missing to_addr";

    while (my ($plugin, $results) = each %$args) {
        $plugin =~ s/.+::Agent:://;

        my $mail = MIME::Lite->new(
            'To'        => $to_addr,
            'From'      => $from_addr,
            'Subject'   => sprintf($subject, $plugin),
            'Data'      => $self->_format( $plugin, $results ),
        );
        # warn $mail->as_string;
        $mail->send;
    }
}

sub _format {
    my ($self, $plugin, $results) = @_;

    my $res = $plugin . "\n\n";
    for my $result (@$results) {
        $res .= "- $result->{target}\n";
        $res .= "$result->{message}\n";
        $res .= "\n\n";
    }
    $res;
}

1;
__END__

=head1 NAME

App::MadEye::Plugin::Notify::Email - notify by email

=head1 SCHEMA

    type: map
    mapping:
        subject:
            type: str
            required: no
        from_addr:
            type: str
            required: yes
        to_addr:
            type: str
            required: yes

=head1 SEE ALSO

L<App::MadEye>, L<MIME::Lite>