All pastes #415954 Raw Edit

Miscellany

public text v1 · immutable
#415954 ·published 2007-03-29 23:32 UTC
rendered paste body
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();