I’ve recently changed my network connection at home to a provider which assigns dynamic addresses. Exim always provided a broken HELO/EHLO name to my smarthost since then because my externally visible hostname changes each time I connect. I’m now using Exim’s Perl interface to lookup the assigned hostname when connecting my smarthost:
-
/etc/exim4/exim.pl
:
Don’t forget to changeppp0
to the interface you want to handle!#! /usr/bin/perl # Requires libio-interface-perl use strict; use IO::Socket; use IO::Interface; sub get_remote_helo_data() { my $s = IO::Socket::INET->new(Proto => 'udp'); my $addr = inet_aton($s->if_addr('ppp0')); my $hostname = gethostbyaddr($addr, AF_INET); $hostname = '' if (!$hostname); return $hostname; }
-
/etc/exim4/conf.d/main/50_exim4-localconfig_perl
:#main/50_exim4-localconfig_perl perl_at_start = true perl_startup = do '/etc/exim4/exim.pl'
- Add the following code to the appropriate transport, e.g.
remote_smtp_smarthost
:helo_data = \ ${if >{${strlen:${perl{get_remote_helo_data}}}}{0} \ {${perl{get_remote_helo_data}}} \ {$primary_hostname}}