summaryrefslogtreecommitdiff
path: root/lib/Log/Dispatch/Email/MailSender.pm
blob: 8d561c76dcca86ada31d1262599b61f51ebd105e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package Log::Dispatch::Email::MailSender;

# By: Joseph Annino
# (c) 2002
# Licensed under the same terms as Perl
#

use strict;
use warnings;

our $VERSION = '2.45';

use Log::Dispatch::Email;

use base qw( Log::Dispatch::Email );

use Mail::Sender ();

sub new {
    my $proto = shift;
    my $class = ref $proto || $proto;

    my %p = @_;

    my $smtp = delete $p{smtp} || 'localhost';
    my $port = delete $p{port} || '25';

    my $self = $class->SUPER::new(%p);

    $self->{smtp} = $smtp;
    $self->{port} = $port;

    return $self;
}

sub send_email {
    my $self = shift;
    my %p    = @_;

    local $?;
    eval {
        my $sender = Mail::Sender->new(
            {
                from    => $self->{from} || 'LogDispatch@foo.bar',
                replyto => $self->{from} || 'LogDispatch@foo.bar',
                to      => ( join ',', @{ $self->{to} } ),
                subject => $self->{subject},
                smtp    => $self->{smtp},
                port    => $self->{port},
            }
        );

        die "Error sending mail ($sender): $Mail::Sender::Error"
            unless ref $sender;

        ref $sender->MailMsg( { msg => $p{message} } )
            or die "Error sending mail: $Mail::Sender::Error";
    };

    warn $@ if $@;
}

1;

# ABSTRACT: Subclass of Log::Dispatch::Email that uses the Mail::Sender module

__END__

=pod

=head1 NAME

Log::Dispatch::Email::MailSender - Subclass of Log::Dispatch::Email that uses the Mail::Sender module

=head1 VERSION

version 2.45

=head1 SYNOPSIS

  use Log::Dispatch;

  my $log = Log::Dispatch->new(
      outputs => [
          [
              'Email::MailSender',
              min_level => 'emerg',
              to        => [qw( foo@example.com bar@example.org )],
              subject   => 'Big error!'
          ]
      ],
  );

  $log->emerg("Something bad is happening");

=head1 DESCRIPTION

This is a subclass of L<Log::Dispatch::Email> that implements the send_email
method using the L<Mail::Sender> module.

=head1 CONSTRUCTOR

The constructor takes the following parameters in addition to the parameters
documented in L<Log::Dispatch::Output> and L<Log::Dispatch::Email>:

=over 4

=item * smtp ($)

The smtp server to connect to. This defaults to "localhost".

=item * port ($)

The port to use when connecting. This defaults to 25.

=back

=head1 AUTHOR

Dave Rolsky <autarch@urth.org>

=head1 COPYRIGHT AND LICENSE

This software is Copyright (c) 2015 by Dave Rolsky.

This is free software, licensed under:

  The Artistic License 2.0 (GPL Compatible)

=cut