my($for)=($hdr=~/\bfor\s+\<?(\S+)\>?\b/);
return $for if !wantarray();
push @r,$for if $for;
- my($from,$fromaddr)=($hdr=~/\bfrom\s+(\S+)\b.*?\[((?:\d{1,3}\.){3}\d{1,3})\]/);
+ my($from,$fromaddr)=($hdr=~/\bfrom\s+(?:(\S+)\b.*?)??\[((?:\d{1,3}\.){3}\d{1,3})\]/);
+ $from=$fromaddr if !defined $from;
push @r,"$from:$fromaddr" if $from;
}
return @r;
}
+my %dnsbl_whitelist=map(($_=>1),(
+ "195.250.128.83" # smtp3.vol.cz; 83.128.250.195.blackholes.five-ten-sg.com
+ ));
+
# Extended Mail::Audit::MAPS
# $domain,$full,[$timeout]
sub dnsbl
$timeout||=30; # sec
$Mail::Audit::MAPS::host=$domain;
my @hosts=map({ s/^.*://; "[$_]"; } # strip DNS part
- grep({ /^([^:@]*):/ && !$alternates_host{$1}; } (Received_for())) # leave only foreign hosts
+ grep({ /^([^:@]*):/ && !$alternates_host{$1} # leave only foreign hosts
+ && !$dnsbl_whitelist{$1}; } (Received_for()))
);
splice @hosts,1 if !$full && @hosts; # "&& @hosts" to prevent: WARN: splice() offset past end of array
{