rendered paste bodyMYSQL_RELAY = SELECT domain FROM relays WHERE domain='${domain}' LIMIT 1
warn message = 553 5.3.0 <$local_part@$domain>... No such user here
condition = ${if eq {1}{${perl{verify_relay_recipient}{${lookup mysql {MYSQL_ROUTE}}}}}}
domains = +relay_to_domains
#!/usr/bin/perl
use strict;
use warnings;
use Net::SMTP;
#$host = 'mail.atlanticfinancial.com';
my $sender = 'testmail@cantella.com';
#$out = verify_address_on_host();
#sub verify_relay_recipient($;$$) {
sub verify_relay_recipient() {
#my $email = $_[0];
my $host = $ARGV[0];
my $email = Exim::expand_string('$local_part@$domain');
#my $host = Exim::expand_string('${lookup mysql {MYSQL_ROUTE}}');
my $smtp = Net::SMTP->new("$host",
Hello => "exchange.cantella.com",
Timeout => 10,
Debug => 1,
);
if (!$smtp) {
Exim::log_write("verify_address_on_host: unable to connect to $host; system error: $!");
return ('?', "unable to connect to $host: $!");
}
if ($smtp->recipient($email)) {
return 0;
# return ('+', "host $host accepted RCPT TO with '" . $smtp->code() . " " . $smtp->message() . "'");
}
else {
my $code = $smtp->code();
if (!defined($code)) {
return ('?', "unknown response to RCPT TO; system error $!");
} elsif ($code =~ /^4\d\d$/) {
return ('?', "temporary failure response to RCPT TO '" . $smtp->code() . " " . $smtp->message() . "'");
} elsif ($code =~ /^5\d\d$/) {
return 1;
# return ('-', "permanent failure response to RCPT TO '" . $smtp->code() . " " . $smtp->message() . "'");
} else {
return ('?', "unknown response to RCPT TO; code = $code");
}
}
$smtp->quit();