line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
3
|
|
|
3
|
|
2302
|
use strict; |
|
3
|
|
|
|
|
8
|
|
|
3
|
|
|
|
|
146
|
|
2
|
|
|
|
|
|
|
package Siesta::Plugin::Bounce; |
3
|
3
|
|
|
3
|
|
18
|
use Siesta::Plugin; |
|
3
|
|
|
|
|
8
|
|
|
3
|
|
|
|
|
33
|
|
4
|
3
|
|
|
3
|
|
86
|
use base 'Siesta::Plugin'; |
|
3
|
|
|
|
|
7
|
|
|
3
|
|
|
|
|
289
|
|
5
|
3
|
|
|
3
|
|
3431
|
use Mail::DeliveryStatus::BounceParser; |
|
3
|
|
|
|
|
519696
|
|
|
3
|
|
|
|
|
59
|
|
6
|
|
|
|
|
|
|
|
7
|
|
|
|
|
|
|
# suggested usage set_plugins( bounce => qw( Bounce ) ); |
8
|
|
|
|
|
|
|
|
9
|
|
|
|
|
|
|
sub description { |
10
|
1
|
|
|
1
|
0
|
831
|
'simple bounce handler'; |
11
|
|
|
|
|
|
|
} |
12
|
|
|
|
|
|
|
|
13
|
|
|
|
|
|
|
sub process { |
14
|
1
|
|
|
1
|
1
|
3
|
my $self = shift; |
15
|
1
|
|
|
|
|
2
|
my $mail = shift; |
16
|
1
|
|
|
|
|
13
|
my $list = $self->list; |
17
|
|
|
|
|
|
|
|
18
|
1
|
|
|
|
|
58
|
my $deferred = $mail->defer(who => $list->owner, |
19
|
|
|
|
|
|
|
why => "bounce"); |
20
|
|
|
|
|
|
|
|
21
|
1
|
|
|
|
|
60892
|
my $bounce = Mail::DeliveryStatus::BounceParser->new( $mail->as_string ); |
22
|
1
|
|
|
|
|
20840
|
my @addresses = grep { $_ } map { $_->get('email') } $bounce->reports; |
|
1
|
|
|
|
|
52
|
|
|
1
|
|
|
|
|
11
|
|
23
|
|
|
|
|
|
|
|
24
|
1
|
|
|
|
|
11
|
Siesta->log("bounce: ". $list->name . " " . join (', ', @addresses)); |
25
|
|
|
|
|
|
|
|
26
|
1
|
50
|
|
|
|
4
|
if (grep { $_ eq $list->owner->email } @addresses) { |
|
1
|
|
|
|
|
8
|
|
27
|
|
|
|
|
|
|
# deep deep badness |
28
|
0
|
|
|
|
|
0
|
Siesta->log("holy shit, a listadmins mail is bouncing, so we can't tell them about it!"); |
29
|
0
|
|
|
|
|
0
|
return; |
30
|
|
|
|
|
|
|
} |
31
|
1
|
|
|
|
|
7021
|
$mail->reply( to => $list->owner->email, |
32
|
|
|
|
|
|
|
subject => $list->name . " bouncing subscriber(s)", |
33
|
|
|
|
|
|
|
body => join("\n", @addresses) ); |
34
|
1
|
|
|
|
|
219
|
return; |
35
|
|
|
|
|
|
|
} |
36
|
|
|
|
|
|
|
|
37
|
|
|
|
|
|
|
1; |