Exim HELO & headers for domains on shared IP


Sep 23, 2008

Have several domains and 4 IPs.

Trying to reduce the possibility of recipient servers identifying legit messages as spam.

Using the server (not a local ISP) for outbound mail. Wanting to set custom HELOs based on the mail server being contacted, and make sure that same server name gets into the email header.

Followed other threads which talk about tweaking the HELO greeting to dish out mail.domain.tld (as opposed to server hostname) based on the dedicated IP for each of the four primary domains associated with those IPs. Have also tweaked remote_smtp & received_header_text. That works fine for the primary domains, but not for any other domains sharing the respective IPs; they still show as being the primary domain associated with that IP.

The limitation for shared IP domains seems to be Exim's use of $interface_address, which, returns the IP to which you're connecting for an SMTP session. With only the IP, the system has no way to figure out which shared domain you're actually trying to reach.

Don't know of any var Exim can 'see' that would indicate the server name being contacted (i.e., mail.domain.tld, as opposed to the IP returned by $interface_address).

Tried playing with mailhelo & mailips but they just kept returning the server hostname, whether or not the above tweaks were applied.

For mailips, have tried:
domain1.tld: my.first.ip.address
mail.domain1.tld: my.first.ip.address
domain2.tld: my.second.ip.address
mail.domain2.tld: my.second.ip.address
domain3.tld: my.second.ip.address
mail.domain3.tld: my.second.ip.address
*: my.first.ip.address

For mailhelo, have tried:
domain1.tld: domain1.tld
mail.domain1.tld: domain1.tld
domain2.tld: domain2.tld
mail.domain2.tld: domain2.tld
*: mail.domain1.tld

as well as
domain1.tld: mail.domain1.tld
mail.domain1.tld: mail.domain1.tld
domain2.tld: mail.domain2.tld
mail.domain2.tld: mail.domain2.tld
*: mail.domain1.tld

(Docs are a little hazy on the proper format for entries in these files)

Again, have tried this with & without the manual tweaking of Exim.conf, no change. Have also played with the "Domains & IPs" section of the Exim Configuration Editor in the WHM GUI. Whether it's set to Auto, or I manually create mailhelo & mailips & set those checkboxes accordingly, no change.

Anyone out there know how to get this working?


Sep 23, 2008
Does anyone have a clue how to do this?

/etc/mailhelo & /etc/mailips don't seem to be working.

Want the HELO from any domain under WHM to show as being that domain, NOT the hostname for the server.

Any ideas would be most appreciated.


Sep 23, 2008
Thanks, but have already been over that doc several times, as I said it does not seem to work.

My first post detailed the different formats tried for mailhelo.

Also, "The easiest method to see a full version of the files with proper syntax is to temporarily enable the following "automatic" option:" does not seem to work. Tried it. Shelled in & took a look at mailhelo & mailip. No change (they stay at zero bytes). Restarted Exim just in case. Still no change. That's why I opted to manually edit them in the first place.

Any clue on how to get this working would be most appreciated. Again, trying to get smtp HELOs to indicate relevant domain, NOT server host name.


Well-Known Member
Jan 18, 2004
cPanel Access Level
Root Administrator
Yet to see a solution for this using a shared IP. Have jiggered the zone files so that a dns report gives the proper mail server output but the headers of the received message still show the server name. Since rDNS is now required, it seems unlikely a shared IP solution exists or is forthcoming.

The current implementation of mailhelo/mailips (which only supports dedicated IPs), is still missing the ability (the last time I checked) to pass a dns report for "mail server host name in greeting". We are currently using the setup shown here:
cPanel Forums -Defining custom routers/transports no longer work in cPanel 11

One advantage is that the directives are entered in the Advanced Exim Editor which prevents them from being over written on updates.