MYSQL_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();