73 lines
2.0 KiB
Perl
73 lines
2.0 KiB
Perl
package Polyze::RRejectRCPT;
|
|
use Moose;
|
|
with 'Polyze::RReject';
|
|
|
|
sub _build_sender_domain {
|
|
my ($self) = @_;
|
|
my ($domain) = ($self->text =~ m/ RCPT from ([^[]+)?\[/);
|
|
return $domain;
|
|
}
|
|
|
|
sub _build_sender_ip {
|
|
my ($self) = @_;
|
|
my ($ip) = ($self->text =~ m/ RCPT from (?:[^[]+)?\[([^]]+)\]/);
|
|
return $ip;
|
|
}
|
|
|
|
# Regexes for identifying the rejection reason.
|
|
|
|
my $RegGreylist =
|
|
qr[rejected: Greylisted, see http://postgrey.schweikert.ch];
|
|
|
|
my $RegReverseDNS =
|
|
qr[Client host rejected: cannot find your reverse hostname];
|
|
|
|
my $RegBlocked = qr[
|
|
# Designed to capture a string like "zen.spamhaus.org".
|
|
postfix/postscreen\b.+
|
|
\ Service\ unavailable;\ client\ .+
|
|
\ blocked\ using\ ([^[:space:];]+)
|
|
]x;
|
|
|
|
my $RegRelay = qr[Relay access denied;];
|
|
|
|
# For postfix's recipient address rejections, e.g. 'User unknown',
|
|
# 'undeliverable address' or rejected via check_recipient_access.
|
|
my $RegCheckRecipient = qr[: Recipient address rejected: ([^:;]+).*; from=<];
|
|
|
|
my $RegProtocolErr = qr[ Protocol error; from=<];
|
|
|
|
# For postfix's reject_unknown_sender_domain.
|
|
my $RegSenderAddress = qr[: (Sender address rejected: .+); from=<];
|
|
|
|
# For postfix's reject_non_fqdn_helo_hostname.
|
|
my $RegHelo = qr[: (Helo command rejected: .+); from=<];
|
|
|
|
sub _build_reason {
|
|
my ($self) = @_;
|
|
my $t = $self->text;
|
|
return do {
|
|
if ($t =~ $RegGreylist)
|
|
{ "Greylist"; }
|
|
elsif ($t =~ $RegReverseDNS)
|
|
{ "No reverse DNS"; }
|
|
elsif (my ($blocker) = $t =~ $RegBlocked)
|
|
{ $blocker; }
|
|
elsif ($t =~ $RegRelay)
|
|
{ "Relay access denied"; }
|
|
elsif (my ($recipient_defect) = $t =~ $RegCheckRecipient)
|
|
{ $recipient_defect; }
|
|
elsif ($t =~ $RegProtocolErr)
|
|
{ "Protocol error"; }
|
|
elsif (my ($sender_defect) = $t =~ $RegSenderAddress)
|
|
{ $sender_defect; }
|
|
elsif (my ($helo_defect) = $t =~ $RegHelo)
|
|
{ $helo_defect; }
|
|
else
|
|
{ "Other"; }
|
|
};
|
|
}
|
|
|
|
no Moose;
|
|
__PACKAGE__->meta->make_immutable;
|