I’d recently moved my commercial email provider from Ionos to Purelymail. This was for two reasons: cost and freeing the email domain name from the clutches of Ionos.
Purelymail offer something they term "symbolic addressing", where everything in the local part of a To: address that follows a symbol character (i.e. not alphanumeric) is ignored for the purposes of routing. I used this feature to update my email address held by numerous providers to make it unique to the provider - something I’d long been meaning to do. Maybe that will help with identifying those companies who leak email addresses.
That made me wonder. Could I provide the same capability for the hydrus mail server? The MTA is Exim4 and it turns out to be quite easy.
The Debian configuration for Exim4 defines a router called
system_aliases
. This is defined in the file
/etc/exim4/conf.d/routers/400_exim4-config_system_aliases
. The key
portion in the router definition is this line:
driver = redirect data = ${lookup{$local_part}lsearch{/etc/aliases}}
The lookup type lsearch
uses the /etc/aliases
file to redirect
mail based on the local_part of an accepted email address. To
implement symbolic addressing, replace lsearch
with
wildlsearch
. This instructs the router to use regular expressions
(PCRE2 variety) when looking up local_part names. Then add a definition
to /etc/aliases
with the following form:
user\\W.*: user
This will make Exim4 deliver an accepted mail with a local_part of
user suffixed by a non-alphanumeric (e.g. user+hmrc@example.com
) to
user@example.com
.
In order to make future upgrades easier, I did not change
etc/exim4/conf.d/routers/400_exim4-config_system_aliases
but instead
created a new router in 390_exim4-config_system_aliases
based
on it. The key part of this now looks like:
wild_system_aliases: debug_print = "R: wild system_aliases for $local_part@$domain" driver = redirect domains = +local_domains allow_fail allow_defer data = ${lookup{$local_part}wildlsearch{/etc/aliases}}
The wild_system_aliases
router is defined before the system_aliases
router
and will therefore take precedence.
Updating the system
The new Exim4 configuration template can be created and installed with the following commands:
sudo update-exim4.conf.template -r sudo update-exim4.conf
Restart Exim4 with:
sudo systemctl restart exim4