line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
package Email::Sender::Role::CommonSending 2.500; |
2
|
|
|
|
|
|
|
# ABSTRACT: the common sending tasks most Email::Sender classes will need |
3
|
|
|
|
|
|
|
|
4
|
12
|
|
|
12
|
|
7264
|
use Moo::Role; |
|
12
|
|
|
|
|
30
|
|
|
12
|
|
|
|
|
75
|
|
5
|
|
|
|
|
|
|
|
6
|
12
|
|
|
12
|
|
3987
|
use Carp (); |
|
12
|
|
|
|
|
29
|
|
|
12
|
|
|
|
|
384
|
|
7
|
12
|
|
|
12
|
|
5816
|
use Email::Abstract 3.006; |
|
12
|
|
|
|
|
309835
|
|
|
12
|
|
|
|
|
541
|
|
8
|
12
|
|
|
12
|
|
5425
|
use Email::Sender::Success; |
|
12
|
|
|
|
|
41
|
|
|
12
|
|
|
|
|
363
|
|
9
|
12
|
|
|
12
|
|
5321
|
use Email::Sender::Failure::Temporary; |
|
12
|
|
|
|
|
46
|
|
|
12
|
|
|
|
|
482
|
|
10
|
12
|
|
|
12
|
|
6295
|
use Email::Sender::Failure::Permanent; |
|
12
|
|
|
|
|
64
|
|
|
12
|
|
|
|
|
360
|
|
11
|
12
|
|
|
12
|
|
85
|
use Scalar::Util (); |
|
12
|
|
|
|
|
34
|
|
|
12
|
|
|
|
|
207
|
|
12
|
12
|
|
|
12
|
|
6889
|
use Try::Tiny; |
|
12
|
|
|
|
|
17779
|
|
|
12
|
|
|
|
|
6014
|
|
13
|
|
|
|
|
|
|
|
14
|
|
|
|
|
|
|
#pod =head1 DESCRIPTION |
15
|
|
|
|
|
|
|
#pod |
16
|
|
|
|
|
|
|
#pod Email::Sender::Role::CommonSending provides a number of features that should |
17
|
|
|
|
|
|
|
#pod ease writing new classes that perform the L role. Instead of |
18
|
|
|
|
|
|
|
#pod writing a C method, implementors will need to write a smaller |
19
|
|
|
|
|
|
|
#pod C method, which will be passed an L object and |
20
|
|
|
|
|
|
|
#pod envelope containing C and C entries. The C entry will be |
21
|
|
|
|
|
|
|
#pod guaranteed to be an array reference. |
22
|
|
|
|
|
|
|
#pod |
23
|
|
|
|
|
|
|
#pod A C method will also be provided as a shortcut for calling: |
24
|
|
|
|
|
|
|
#pod |
25
|
|
|
|
|
|
|
#pod Email::Sender::Success->new(...); |
26
|
|
|
|
|
|
|
#pod |
27
|
|
|
|
|
|
|
#pod A few other minor details are handled by CommonSending; for more information, |
28
|
|
|
|
|
|
|
#pod consult the source. |
29
|
|
|
|
|
|
|
#pod |
30
|
|
|
|
|
|
|
#pod The methods documented here may be overridden to alter the behavior of the |
31
|
|
|
|
|
|
|
#pod CommonSending role. |
32
|
|
|
|
|
|
|
#pod |
33
|
|
|
|
|
|
|
#pod =cut |
34
|
|
|
|
|
|
|
|
35
|
|
|
|
|
|
|
with 'Email::Sender'; |
36
|
|
|
|
|
|
|
|
37
|
|
|
|
|
|
|
requires 'send_email'; |
38
|
|
|
|
|
|
|
|
39
|
|
|
|
|
|
|
sub send { |
40
|
30
|
|
|
30
|
0
|
23494
|
my ($self, $message, $env, @rest) = @_; |
41
|
30
|
|
|
|
|
138
|
my $email = $self->prepare_email($message); |
42
|
30
|
|
|
|
|
5862
|
my $envelope = $self->prepare_envelope($env); |
43
|
|
|
|
|
|
|
|
44
|
|
|
|
|
|
|
try { |
45
|
30
|
|
|
30
|
|
1865
|
return $self->send_email($email, $envelope, @rest); |
46
|
|
|
|
|
|
|
} catch { |
47
|
11
|
50
|
|
11
|
|
390
|
Carp::confess('unknown error') unless my $err = $_; |
48
|
|
|
|
|
|
|
|
49
|
11
|
100
|
66
|
|
|
17698
|
if ( |
50
|
11
|
|
|
|
|
401
|
try { $err->isa('Email::Sender::Failure') } |
51
|
|
|
|
|
|
|
and ! (my @tmp = $err->recipients) |
52
|
|
|
|
|
|
|
) { |
53
|
6
|
|
|
|
|
23
|
$err->_set_recipients([ @{ $envelope->{to} } ]); |
|
6
|
|
|
|
|
173
|
|
54
|
|
|
|
|
|
|
} |
55
|
|
|
|
|
|
|
|
56
|
11
|
|
|
|
|
448
|
die $err; |
57
|
|
|
|
|
|
|
} |
58
|
30
|
|
|
|
|
321
|
} |
59
|
|
|
|
|
|
|
|
60
|
|
|
|
|
|
|
#pod =method prepare_email |
61
|
|
|
|
|
|
|
#pod |
62
|
|
|
|
|
|
|
#pod This method is passed a scalar and is expected to return an Email::Abstract |
63
|
|
|
|
|
|
|
#pod object. You probably shouldn't override it in most cases. |
64
|
|
|
|
|
|
|
#pod |
65
|
|
|
|
|
|
|
#pod =cut |
66
|
|
|
|
|
|
|
|
67
|
|
|
|
|
|
|
sub prepare_email { |
68
|
35
|
|
|
35
|
1
|
3484
|
my ($self, $msg) = @_; |
69
|
|
|
|
|
|
|
|
70
|
35
|
50
|
|
|
|
113
|
Carp::confess("no email passed in to sender") unless defined $msg; |
71
|
|
|
|
|
|
|
|
72
|
|
|
|
|
|
|
# We check blessed because if someone would pass in a large message, in some |
73
|
|
|
|
|
|
|
# perls calling isa on the string would create a package with the string as |
74
|
|
|
|
|
|
|
# the name. If the message was (say) two megs, now you'd have a two meg hash |
75
|
|
|
|
|
|
|
# key in the stash. Oops! -- rjbs, 2008-12-04 |
76
|
35
|
100
|
100
|
|
|
176
|
return $msg if Scalar::Util::blessed($msg) and eval { $msg->isa('Email::Abstract') }; |
|
8
|
|
|
|
|
86
|
|
77
|
|
|
|
|
|
|
|
78
|
30
|
|
|
|
|
234
|
return Email::Abstract->new($msg); |
79
|
|
|
|
|
|
|
} |
80
|
|
|
|
|
|
|
|
81
|
|
|
|
|
|
|
#pod =method prepare_envelope |
82
|
|
|
|
|
|
|
#pod |
83
|
|
|
|
|
|
|
#pod This method is passed a hashref and returns a new hashref that should be used |
84
|
|
|
|
|
|
|
#pod as the envelope passed to the C method. This method is responsible |
85
|
|
|
|
|
|
|
#pod for ensuring that the F entry is an array. |
86
|
|
|
|
|
|
|
#pod |
87
|
|
|
|
|
|
|
#pod =cut |
88
|
|
|
|
|
|
|
|
89
|
|
|
|
|
|
|
sub prepare_envelope { |
90
|
30
|
|
|
30
|
1
|
93
|
my ($self, $env) = @_; |
91
|
|
|
|
|
|
|
|
92
|
30
|
|
|
|
|
59
|
my %new_env; |
93
|
30
|
100
|
|
|
|
139
|
$new_env{to} = ref $env->{to} ? $env->{to} : [ grep {defined} $env->{to} ]; |
|
12
|
|
|
|
|
53
|
|
94
|
30
|
|
|
|
|
76
|
$new_env{from} = $env->{from}; |
95
|
|
|
|
|
|
|
|
96
|
30
|
|
|
|
|
93
|
return \%new_env; |
97
|
|
|
|
|
|
|
} |
98
|
|
|
|
|
|
|
|
99
|
|
|
|
|
|
|
#pod =method success |
100
|
|
|
|
|
|
|
#pod |
101
|
|
|
|
|
|
|
#pod ... |
102
|
|
|
|
|
|
|
#pod return $self->success; |
103
|
|
|
|
|
|
|
#pod |
104
|
|
|
|
|
|
|
#pod This method returns a new Email::Sender::Success object. Arguments passed to |
105
|
|
|
|
|
|
|
#pod this method are passed along to the Success's constructor. This is provided as |
106
|
|
|
|
|
|
|
#pod a convenience for returning success from subclasses' C methods. |
107
|
|
|
|
|
|
|
#pod |
108
|
|
|
|
|
|
|
#pod =cut |
109
|
|
|
|
|
|
|
|
110
|
|
|
|
|
|
|
sub success { |
111
|
13
|
|
|
13
|
1
|
51
|
my $self = shift; |
112
|
13
|
|
|
|
|
229
|
my $success = Email::Sender::Success->new(@_); |
113
|
|
|
|
|
|
|
} |
114
|
|
|
|
|
|
|
|
115
|
12
|
|
|
12
|
|
132
|
no Moo::Role; |
|
12
|
|
|
|
|
33
|
|
|
12
|
|
|
|
|
148
|
|
116
|
|
|
|
|
|
|
1; |
117
|
|
|
|
|
|
|
|
118
|
|
|
|
|
|
|
__END__ |