How can I check if a relay is blacklisted (RBL)?
RBL (Real-time Blackhole List) checks should be done in filter_begin or filter_sender
to reject blocked senders as early as possible.
Use relay_is_blacklisted for a single RBL or relay_is_blacklisted_multi_count
to query several RBLs simultaneously and reject based on a hit count threshold.
use Mail::MIMEDefang::Net;
sub filter_begin {
my($entity) = @_;
# Single RBL check
my $result = relay_is_blacklisted($RelayAddr, 'zen.spamhaus.org');
if ($result) {
md_syslog('Warning', "Relay $RelayAddr listed in zen.spamhaus.org ($result)");
return action_bounce("Mail rejected: $RelayAddr is blacklisted");
}
# Multi-RBL check: reject if listed in 2 or more RBLs
my @rbls = qw(zen.spamhaus.org bl.spamcop.net dnsbl.sorbs.net);
my $hit_count = relay_is_blacklisted_multi_count($RelayAddr, @rbls);
if ($hit_count >= 2) {
md_syslog('Warning',
"Relay $RelayAddr listed in $hit_count RBLs - rejecting");
return action_bounce(
"Mail rejected: sender IP listed in multiple blacklists");
}
}