Sendmail is a really powerful email tool but if like me it isn't always the final delivery point in your organisation it can be quite tricky to setup, this is especially true if you'd still like sendmail to be the delivery point for some of your emails (those for mailing lists, scripts, bit buckets etc where sendmail is so handy).
I basically wanted all email domains that I didn't host on this sendmail server (i.e. not @my.domain) to go to an external relay host. And any email addressed @my.domain and unqualified addresses should be treated the same and go through the aliasing process then delivered to another server.
So I wanted:
email@example.com -> relay host
blah -> aliased or if nothing to alias or result of aliasing -> relay host as firstname.lastname@example.org (name could have been changed by aliasing)
email@example.com -> aliased or if nothing to alias or result of aliasing -> relay host as firstname.lastname@example.org (name could have been changed by aliasing)
This is surprisingly tricky. I searched for a while about how to do this and found a few approaches.
This guys approach of using a modified nullclient got me close:
As I remember though this failed for me on the email@example.com I could never get to alias.
The correct approach seemed to be to set,
provided masquerading is setup properly, this worked for all cases for me with one fatal flaw, if an address was unqualified the LOCAL_RELAY option sends the email onto the relay as firstname.lastname@example.org not email@example.com. In our case Exchange and then that just gets rejected.
I struggled with this for a while. Other's have modified LUSER_RELAY so that it takes in the domain name you'd like to append rather than adding the LOCAL_RELAY name. Such as here:
I quite liked this but didn't want to maintain modified base distributed m4 files that might get overwritten by OS upgrades.
So I took the approach of creating a copy of the relay delivery agent (with a new name (modrelay), but I then added a single rule to MasqSMTP (and created a new rule name for this (MasqSMTPTwist) and a copy of all it's lines below my new one) to remove the relay name from the email address and replace it with the preferred domain name. So I added this to the bottom of my sendmail.mc file:
Mmodrelay, P=[IPC], F=mDFMuXa8, S=EnvFromSMTP/HdrFromSMTP, R=MasqSM
TPTwist, E=\r\n, L=2040,
R$* < @ exchange.my.domain > $* $@ $1 < @ my.domain > $2
already fully qualified
R$* < @ $* > $* $@ $1 < @ $2 > $3 already fully qualified
R$+ $@ $1 < @ *LOCAL* > add local qualification
Then I called this from LOCAL_RELAY by having "modrelay:" in front of the relay's name e.g.
It's a little bit messy but works for me.