line |
true |
false |
branch |
122
|
0 |
132 |
if (not $data) { } |
|
132 |
0 |
elsif (not ref $data) { } |
|
0 |
0 |
elsif (ref $data eq 'ARRAY') { } |
123
|
0 |
0 |
if -t STDIN |
142
|
132 |
0 |
defined $message->effective_type ? : |
|
131 |
1 |
defined $message->head->get('subject') ? : |
152
|
6 |
654 |
if (my $newmessage = $self->$preprocessor($message)) |
159
|
131 |
1 |
defined $message->head->get('subject') ? : |
170
|
132 |
0 |
unless $message->head->get('x-delivery-agent') and $message->head->get('X-Delivery-Agent') =~ /^TMDA/ |
179
|
131 |
1 |
unless $message->head->get('X-Bluebottle-Request') and $first_part->stringify_body =~ /This account is protected by Bluebottle/ |
187
|
130 |
1 |
unless defined $first_part and $first_part->stringify_body =~ /Your server requires confirmation/ |
195
|
129 |
1 |
unless defined $first_part and $first_part->stringify_body =~ /Please add yourself to my Boxbe Guest List/ |
202
|
129 |
1 |
unless defined $first_part and $first_part->stringify_body =~ /This\s+is\s+a\s+one-time\s+automated\s+message\s+to\s+confirm\s+that\s+you're\s+listed\s+on\s+my\s+Boxbe\s+Guest\s+List/ |
219
|
112 |
18 |
if $message->effective_type eq 'multipart/report' |
220
|
1 |
17 |
if not $first_part or $first_part->effective_type ne 'text/plain' |
222
|
3 |
14 |
if length $string > 3000 |
224
|
13 |
1 |
unless $string =~ /auto.{0,20}(reply|response)|return receipt|vacation|(out|away|on holiday).*office/i |
233
|
112 |
17 |
if $message->effective_type eq 'multipart/report' |
234
|
1 |
16 |
if not $first_part or $first_part->effective_type ne 'text/plain' |
236
|
1 |
15 |
unless defined $subject |
237
|
14 |
1 |
unless $subject =~ /^AUTO/ |
238
|
0 |
1 |
unless $subject =~ /is out of the office/ |
247
|
112 |
16 |
if $message->effective_type eq 'multipart/report' |
248
|
1 |
15 |
if not $first_part or $first_part->effective_type ne 'text/plain' |
250
|
1 |
14 |
unless defined $subject |
251
|
13 |
1 |
unless $subject =~ /Automatyczna\s+odpowied/ |
260
|
112 |
15 |
if $message->effective_type eq 'multipart/report' |
261
|
1 |
14 |
if not $first_part or $first_part->effective_type ne 'text/plain' |
263
|
2 |
12 |
if length $string > 3000 |
264
|
12 |
0 |
unless $string =~ /(address .{0,60} changed | domain .{0,40} retired) .*
(has\s*been|was|have|will\s*be) \s* (forwarded|delivered)/six |
276
|
0 |
10 |
if ($message->effective_type eq 'text/plain' and length $message->as_string < 3000 and $message->bodyhandle->as_string =~ /norton\sassociates\swebshield|content\s+filter/xi) |
289
|
0 |
127 |
if ($message->effective_type eq 'text/plain' and $message->bodyhandle->as_string =~ /transient.*error/is) |
306
|
10 |
117 |
if $message->effective_type eq 'text/plain' |
309
|
4 |
123 |
if $message->effective_type =~ /multipart/ and $message->effective_type ne 'multipart/report' |
313
|
13 |
114 |
if ($part_for_maybe_transient) |
316
|
12 |
1 |
unless defined $transient_pos |
319
|
1 |
0 |
if _position_before($permanent_pos, $orig_msg_pos) |
320
|
0 |
0 |
if (_position_before($transient_pos, $orig_msg_pos)) |
329
|
116 |
11 |
if ($message->effective_type =~ /multipart/) |
332
|
95 |
21 |
if (my($orig_message) = grep({$_->effective_type eq 'message/rfc822';} $message->parts)) |
338
|
94 |
1 |
if ($orig_message_id) { } |
352
|
17 |
99 |
if (not $self->{'orig_message_id'} and my($rfc822_headers) = grep({lc $_->effective_type eq 'text/rfc822-headers';} $message->parts)) |
359
|
17 |
0 |
if ($message_id) |
367
|
16 |
111 |
unless ($self->{'orig_message_id'}) |
368
|
5 |
11 |
if ($message->bodyhandle and $message->bodyhandle->as_string =~ /Message-ID: (\S+)/i) |
374
|
11 |
116 |
unless ($self->{'orig_message_id'}) |
383
|
112 |
15 |
if ($message->effective_type eq 'multipart/report') { } |
|
4 |
11 |
elsif ($message->effective_type =~ /multipart/) { } |
|
10 |
1 |
elsif ($message->effective_type =~ m[text/plain]) { } |
421
|
114 |
22 |
if (defined $report->get('Action') and lc $report->get('Action')) |
424
|
114 |
0 |
if ($action =~ s/^\s*([a-z]+)\b.*/$1/s) |
429
|
0 |
114 |
if ($action eq 'expanded') { } |
|
113 |
1 |
elsif ($action eq 'failed') { } |
444
|
270 |
0 |
if (defined $val) |
451
|
2 |
133 |
if ($self->{'prefer_final_recipient'}) { } |
459
|
22 |
113 |
unless $email |
467
|
113 |
0 |
if (defined $reason) |
474
|
113 |
0 |
if (defined $reason) { } |
481
|
0 |
113 |
if $status =~ s/ \(permanent failure\)$// |
483
|
113 |
0 |
if ($status) { } |
487
|
9 |
104 |
if ($status =~ /^5\.1\.[01]$/) { } |
|
1 |
103 |
elsif ($status eq '5.1.2') { } |
|
2 |
101 |
elsif ($status eq '5.2.1') { } |
|
1 |
100 |
elsif ($status eq '5.2.2') { } |
|
1 |
99 |
elsif ($status eq '5.4.4') { } |
510
|
113 |
0 |
if (defined $diag_code) |
514
|
13 |
100 |
if $host |
518
|
113 |
0 |
if (defined $diag_code) |
523
|
13 |
0 |
if (not $code and $status and $status =~ /\A([245])\.?([0-9])\.?([0-9])/) |
527
|
113 |
0 |
if ($code) |
531
|
100 |
13 |
unless ($report->get('host')) |
533
|
100 |
0 |
if (defined $email) |
535
|
99 |
1 |
if $host |
539
|
1 |
112 |
if ($report->get('smtp_code') and $report->get('smtp_code') =~ /^2../) |
548
|
113 |
0 |
unless ($arg->{'report_non_bounces'}) |
549
|
0 |
113 |
if ($report->get('std_reason') eq 'no_problemo') |
562
|
0 |
111 |
if ($seen_action_expanded and not $seen_action_failed) |
575
|
3 |
4 |
if $_->effective_type =~ m[text/plain] |
598
|
5 |
5 |
if ($body_string =~ /$Returned_Message_Below/) { } |
|
0 |
5 |
elsif ($body_string =~ /(.+)\n\n(.+?Message-ID:.+)/is) { } |
628
|
0 |
415 |
if (ref $self->{'log'} eq 'CODE') |
638
|
0 |
14 |
if (@_ > 1) |
642
|
3 |
11 |
if ref $text |
658
|
1 |
13 |
unless $text |
664
|
26 |
13 |
if $i % 2 == 0 |
668
|
0 |
13 |
if ($split[$i - 1] =~ /they are not accepting mail from/) |
673
|
1 |
12 |
if ($split[$i - 1] =~ /A message sent by/) |
679
|
12 |
0 |
if $#split > $i |
680
|
6 |
6 |
if $std_reason eq 'unknown' |
689
|
0 |
1 |
if exists $by_email{$email} and $by_email{$email}{'std_reason'} ne 'unknown' and $std_reason eq 'unknown' |
930
|
0 |
117 |
unless (defined $_) |
934
|
1 |
116 |
if (/(?:domain|host|service)\s+(?:not\s+found|unknown|not\s+known)/i) |
938
|
1 |
115 |
if (/sorry,\s+that\s+domain\s+isn't\s+in\s+my\s+list\s+of\s+allowed\s+rcpthosts/i) |
942
|
2 |
109 |
if (/try.again.later/is or /mailbox\b.*\bfull/ or /storage/i or /quota/i or /\s552\s/ or /\s#?5\.2\.2\s/ or /User\s+mailbox\s+exceeds\s+allowed\s+size/i or /Mailbox\s+size\s+limit\s+exceeded/i or /max\s+message\s+size\s+exceeded/i or /Benutzer\s+hat\s+zuviele\s+Mails\s+auf\s+dem\s+Server/i or /exceeded\s+its\s+disk\s+space\s+limit/i) |
962
|
2 |
79 |
if (/\s \(? \#? 5\.1\.[01] \)? \s/x or /$user_re\s+(?:\S+\s+)? (?:is\s+)? # Generic
(?: (?: un|not\s+) (?: known | recognized )
| [dw]oes\s?n[o']?t
(?: exist|found ) | disabled | expired ) /xi or /no\s+(?:such)\s+?$user_re/i or /unrouteable address/i or /inactive user/i or /unknown local part/i or /user\s+doesn't\s+have\s+a/i or /account\s+has\s+been\s+(?:disabled|suspended)/i or /$user_re\s+(?:suspended|discontinued)/i or /unknown\s+$user_re/i or /$user_re\s+(?:is\s+)?(?:inactive|unavailable)/i or /(?:(?:in|not\s+a\s+)?valid|no such)\s$user_re/i or /$user_re\s+(?:was\s+)?not\s+found/i or /$user_re \s+ (?:is\s+)? (?:currently\s+)? # ATT, generic
(?:suspended|unavailable)/xi or /address is administratively disabled/i or /no $user_re\s+(?:here\s+)?by that name/i or /$Mail::DeliveryStatus::BounceParser::EMAIL_ADDR_REGEX>? is invalid/i or /address.*not known here/i or /recipient\s+(?:address\s+)?rejected/i or /not\s+listed\s+in\s+Domino/i or /account not activated/i or /not\s+our\s+customer/i or /doesn't handle mail for that user/i or /$user_re\s+does\s+not\s+exist/i or /Recipient\s+$Mail::DeliveryStatus::BounceParser::EMAIL_ADDR_REGEX>?\s+does\s+not\s+exist/i or /recipient\s+no\s+longer\s+on\s+server/i or /is\s+not\s+a\s+known\s+user\s+on\s+this\s+system/i or /Rcpt\s+$Mail::DeliveryStatus::BounceParser::EMAIL_ADDR_REGEX>?\s+does\s+not\s+exist/i or /Mailbox\s+not\s+available/i or /No\s+mailbox\s+found/i or /$Mail::DeliveryStatus::BounceParser::EMAIL_ADDR_REGEX>?\s+is\s+a\s+deactivated\s+mailbox/i or /Recipient\s+does\s+not\s+exist\s+on\s+this\s+system/i or /user\s+mail-box\s+not\s+found/i or /No\s+mail\s+box\s+available\s+for\s+this\s+user/i or /User\s+\[\S+\]\s+does\s+not\s+exist/i or /email\s+account\s+that\s+you\s+tried\s+to\s+reach\s+is\s+disabled/i or /not\s+an\s+active\s+address\s+at\s+this\s+host/i or /not\s+a\s+known\s+user/i or /BAD_RECIPIENT/i) |
1010
|
2 |
71 |
if (/domain\s+syntax/i or /timed\s+out/i or /route\s+to\s+host/i or /connection\s+refused/i or /no\s+data\s+record\s+of\s+requested\s+type/i or /Malformed name server reply/i or /as\s+a\s+relay,\s+but\s+I\s+have\s+not\s+been\s+configured\s+to\s+let/i or /550\s+relay\s+not\s+permitted/i or /550\s+relaying\s+denied/i or /Relay\s+access\s+denied/i or /Relaying\s+denied/i or /No\s+such\s+domain\s+at\s+this\s+location/i) |
1027
|
2 |
23 |
if (/Blocked\s+by\s+SpamAssassin/i or /spam\s+rejection/i or /identified\s+SPAM,\s+message\s+permanently\s+rejected/i or /Mail\s+appears\s+to\s+be\s+unsolicited/i or /Message\s+rejected\s+as\s+spam\s+by\s+Content\s+Filtering/i or /message\s+looks\s+like\s+SPAM\s+to\s+me/i or /NOT\s+JUNKEMAILFILTER/i or /your\s+message\s+has\s+triggered\s+a\s+SPAM\s+block/i or /Spam\s+detected/i or /Message\s+looks\s+like\s+spam/i or /Message\s+content\s+rejected,\s+UBE/i or /Blocked\s+using\s+spam\s+pattern/i or /Client\s+host\s+\S+\s+blocked\s+using/i or /breaches\s+local\s+URIBL\s+policy/i or /Your\s+email\s+had\s+spam-like\s+header\s+contents/i or /detected\s+as\s+spam/i or /Denied\s+due\s+to\s+spam\s+list/i or /appears\s+to\s+be\s+unsolicited/i or /antispam\s+checks/i or /Probable\s+Spam/i or /ESETS_SMTP\s+\(spam\)/i or /this\s+message\s+appears\s+to\s+be\s+spam/i or /Spam\s+score\s+\(\S+\)\s+too\s+high/i or /matches\s+a\s+profile\s+the\s+Internet\s+community\s+may\s+consider\s+spam/i or /accepted\s+due\s+to\s+spam\s+filter/i or /content\s+filter\s+rejection/i or /using\s+a\s+mass\s+mailer/i or /Spam\s+email/i or /Spam\s+content/i or /CONTENT\s+REJECT/i and /dspam\s+check/i or /this\s+email\s+is\s+spam/i or /rejected\s+as\s+spam/i or /MCSpamSignature/i or /identified\s+as\s+spam/i or /Spamming\s+not\s+allowed/i or /classified\s+as\s+spam/i or /Message\s+refused\s+by\s+MailMarshal\s+SpamProfiler/i or /Your\s+email\s+appears\s+similar\s+to\s+spam/i or /This\s+message\s+scored\s+\S+\s+spam\s+points\s+and\s+has\s+been\s+rejected/i or /Spam\s+Blocked/i or /bulk\s+e?mail/i or /probably\s+spam/i or /appears\s+to\s+be\s+SPAM/i or /SPAM NOT ACCEPTED/i or /5.9.8\s+spam/i) |
1077
|
2 |
17 |
if (/RESOLVER.RST.RecipSizeLimit/i or /exceeds\s+size\s+limit/i or /Message\s+too\s+big/i or /RESOLVER.RST.SendSizeLimit/i or /Message\s+Rejected\s+Class=size/i) |
1102
|
131 |
1 |
unless ($message->head->get('X-Mailer') || '') =~ /Internet Mail Service/i |
1104
|
1 |
0 |
if ($message->is_multipart) { } |
1106
|
0 |
1 |
unless my($error_part) = grep({$_->effective_type eq 'text/plain';} $message->parts) |
1108
|
0 |
1 |
unless my($actual_error) = $error_part->as_string =~ /did not reach the following recipient\S+\s*(.*)/is |
1112
|
1 |
0 |
if (my $io = $error_part->open('w')) |
1119
|
0 |
0 |
unless my($actual_error) = $message->bodyhandle->as_string =~ /did not reach the following recipient\S+\s*(.*)/is |
1138
|
130 |
2 |
unless ($message->head->get('Mailer') || '') =~ /AirMail/i |
1139
|
0 |
2 |
unless $message->effective_type eq 'text/plain' |
1140
|
0 |
2 |
unless $message->bodyhandle->as_string =~ /Your mail to the following recipients could not be delivered because they are not accepting mail/i |
1153
|
0 |
6 |
if (/because they are not accepting mail from (\S+?):?/i) |
1158
|
2 |
4 |
if (/^\s*(\S+)\s*$/) |
1160
|
0 |
2 |
if ($recipient =~ /\@/) |
1173
|
2 |
0 |
if (my $io = $message->open('w')) |
1190
|
131 |
1 |
unless ($message->head->get('X-Mailer') || '') =~ /Novell Groupwise/i |
1191
|
0 |
1 |
unless $message->effective_type eq 'multipart/mixed' |
1193
|
0 |
1 |
unless my($error_part) = grep({$_->effective_type eq 'text/plain';} $message->parts) |
1202
|
1 |
2 |
if (/^(\s*)(\S+)(\s+\(.*\))$/) |
1204
|
1 |
0 |
if ($recipient =~ /\@/) |
1217
|
1 |
0 |
if (my $io = $error_part->open('w')) |
1248
|
116 |
16 |
unless $message->effective_type eq 'text/plain' |
1250
|
14 |
2 |
unless $message->bodyhandle->as_string =~ /The following addresses had permanent fatal errors/ |
1253
|
0 |
2 |
unless $message->bodyhandle->as_string =~ /Transcript of session follows/ |
1256
|
0 |
2 |
unless $message->bodyhandle->as_string =~ /Message .* follows/ |
1271
|
2 |
0 |
if $reporting_mta |
1272
|
2 |
0 |
if $arrival_date |
1301
|
2 |
0 |
$by_email{$email}{'host'} ? : |
1317
|
2 |
0 |
$by_email{$email}{'host'} ? : |
|
0 |
2 |
unless $by_email{$email}{'errors'} |
1328
|
0 |
6 |
if /RCPT TO:\s*(\S+)/im |
1330
|
2 |
4 |
if (/The\s+following\s+addresses\s+had\s+permanent\s+fatal\s+errors\s+-----\s+\(.*)\>?/im) |
1334
|
5 |
1 |
if $email |
1336
|
2 |
4 |
if (/while talking to (\S+)/im) |
1341
|
2 |
4 |
if (/<<< (\d\d\d) (.*)/m) |
1346
|
0 |
6 |
if (/^(\d\d\d)\b.*(<\S+\@\S+>)\.*\s+(.+)/m) |
1447
|
1 |
697 |
if $_->effective_type eq 'message/xdelivery-status' |
1462
|
1 |
0 |
if defined $pos_a and !defined($pos_b) || $pos_a < $pos_b |
1470
|
3 |
12 |
$string =~ /$regex/ ? : |