Some remote SMTP server I am trying to deliver mail to refuses to accept the HELO from my server:
504 5.5.2 <localhost>: Helo command rejected: need fully-qualified hostname
Apparently, my Exim4 server sends localhost
as its FQDN. Searching the net and a bunch of config files, I have learned that the value sent as FQDN during HELO is drawn from the primary_hostname
configuration variable.
My question is: what is the correct way to change this variable in a Debian system? I guess I can simply hardcode a value in on of the Exim4 config files, but IMHO it would seem to make more sense if the value automagically corresponded to /etc/mailname
or some other centralized name config.
I have a feeling that the answer to my question can be found in this text from the Debian wiki:
The name used by Exim in EHLO/HELO is pulled from configuration option
primary_hostname
. Debian's exim4 default configuration does not setprimary_hostname
. Exim then defaults to uname() to find the host name. If that call only returns one component, gethostbyname() or getipnodebyname() is used to obtain the fully qualified host name.If your Exim HELOs as localhost.localdomain, then you have most probably a misconfigured /etc/hosts created by some versions of the Debian installer. In this case, please fix your /etc/hosts.
Unfortunately, I am not familiar enough with Linux server administration to know exacly what all this means :(
Your /etc/hosts file should have at least two records in it. The first record should be of the form:
the second one should be of the form:
You also need to make sure that your /etc/hostname file contains the server's FQDN, and that running
hostname -f
returns your servers FQDN. If you make sure all of this is correct, and restart Exim, you should start seeing it HELO properly.If you use a single configuration file, set the PRIMARY_HOST_NAME variable to the desired name:
For example in /etc/exim4/exim4.conf:
or set
MAIN_HARDCODE_PRIMARY_HOSTNAME
in update-exim4.conf.conf if you are using split file configuration.To be safe, restart exim.
The primary hostname is prompted for during the installation of exim4. You can run the command
to go through the prompts again.
As far as I know, if you're already using the 'split configuration' (lots of little files under /etc/exim4/conf.d) and opt to stick with that when prompted, dpkg-reconfigure shouldn't overwrite any of your existing config alterations other than to the settings it prompts you for, but, as ever, you should take a backup first to be safe.
The
primary_hostname
variable is filled according to the fully qualified domain name (FQDN) of the system. On Debian and related systems this is typically formed using the contents of the/etc/hostname
and/etc/hosts
files. The hostname file should contain the short hostname (e.g.foo
), and the hosts file should contain an entry resolvingfoo
intofoo.bar.baz
, i.e. hostname with its domain suffix (normally matching a DNS entry).The output from the command
hostname
(without any parameters) will return the former, and thehostname -f
output will return the latter.The hostname file is typically filled upon installation, and the hosts file can be edited to have one other record in it beside the default localhost records - it should be of the form:
The three columns should be separated by spaces or tabs, it doesn't matter. The IP address can be 127.0.0.1 just like localhost, but the hostname part has match the system hostname, and the middle part should be the FQDN, i.e. hostname with a domain suffix.
To verify the line is working, simply run
hostname -f
and check that it returns your server's FQDN.Finally, restart Exim, e.g. with:
Afterwards you should start seeing it HELO properly. Its variable can be verified by running:
(NB: I originally did this as an edit to the answer from 2009, but it was rejected. The things I was originally fixing are: there was no need to repeat the default localhost record, just explain what the addition should be; explain which IP address can be used; explain what is FQDN; explain how to verify exim itself.)
after adding the the same string in /etc/hosts, hostname -f will return your FQDN
I have the same problem. I need to change the mail hostname, because some emails fails, when them was sended. Whith this error:
So I change it into the
/etc/exim.config
the param primary_hostnameSome code of this file:
in WHM goto Exim Configuration Manager -> Advanced Editor
scroll down until you find "Add additional configuration settings" (a big blue button) and click it.
in the new line, add [ primary_hostname ] = [ mydomain.com ]
scroll to the bottom and click Save.
I've spent some time to figure all required steps to change hostname so this answer is to summarize everything for Debian 9 in one place:
To change hostname you need to run:
Note: use your domain FQN as hostname. If you use something else - you will get mail delivery rejections like "Helo command rejected: need fully-qualified hostname".
Finally: edit
/etc/hosts
so that it looks like:xxx.xxx.xxx.xxx
is IP of your server.Then verify changes by running
It must return
example.com
.Then run
It must return your domain FQN like
example.com
Also verify that
/etc/hostname
containsexample.com
and change it if not so that hostname persists after OS restart.OS part done. Let's continue to exim.
To be sure exim uses new hostname you need to edit
/etc/exim4/exim4.conf.localmacros
and add line:Note: exim config editing is optional and if
/usr/sbin/exim4 -bP primary_hostname
returns your new hostname - editing/etc/exim4/exim4.conf.localmacros
is not required.But you still must update exim configs and restart exim:
And finally verify exim hostname by running
It must return
example.com