Here's the setup:
We have a domain, mydomain.com. Everything is on our own server, except general email accounts which are through gmail.
Currently gmail is set as the MX record.
The server also has various email aliases it needs to support for bug trackers and such. e.g. bugs@mydomain.com |/path/to/issuetracker.script
I'm struggling with a setup that allows the following, both locally and from user's email clients.
- guser1 - has a gmail account and a local account
- guser2 - only has a gmail account
- bugs - has a pipe alias in /etc/aliases for issue tracker
Scenarios
- mail to guser1@mydomain.com from local host (crons and such) needs to go to gmail account
- mail to guser2@mydomain.com from local host
- mail to bugs@mydomain.com needs to be piped to the local issue tracker script
So, the first stab was creating a transport map. In this scenario, the our server would be set as teh MX and guser* destined emails are sent to gmail. Put the gmail users in a map like so:
guser1@mydomain.com smtp:gmailsmtp:25
guser2@mydomain.com smtp:gmailsmtp:25
Problems:
- Ignores extensions such as guser1+extension@mydomain.com
- Only works if append_at_myorigin = no (if set to yes, gmail refuses to connect with: E4C7E3E09BA3: to=, relay=none, delay=0.05, delays=0.02/0.01/0.02/0, dsn=4.4.1, status=deferred (connect to gmail-smtp-in.l.google.com[209.85.222.57]:25: Connection refused))
- since append_at_myorigin is set to no, all received emails have (unknown sender)
The second stab was to set explicit localhost aliases in /etc/aliases and do a domain wide forward on mydomain. This too requires setting the local server as the MX:
root: root@localhost
# transport
mydomain.com smtp:gmailsmtp:25
Problems: * If I create a transport map for a domain that matches "$myhostname", the aliases file is never parsed. So when a local user (or daemon) sends an email like:
mail -s "testing" root < text.txt
Postfix ignores the /etc/alias entry and maps to root@mydomain.com and attempts to send it to the gmail transport mapping.
Third stab:
Create a subdomain for the bugs, something like bugs.mydomain.com. Set the MX for this domain to local server and leave the MX for mydomain.com to the Gmail server.
Problems: * Does not solve the issue with local accounts. So when the bug tracker responds to an email from guser1@mydomain.com, it uses a local transport and the user never receives the email.
% postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_at_myorigin = no
append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
inet_interfaces = all
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
mydestination = $myhostname, localhost.$myhostname, localhost
myhostname = mydomain.com
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
myorigin = /etc/mailname
readme_directory = no
recipient_delimiter = +
relayhost =
smtp_tls_cert_file = /etc/ssl/certs/kspace.pem
smtp_tls_enforce_peername = no
smtp_tls_key_file = /etc/ssl/certs/kspace.pem
smtp_tls_note_starttls_offer = yes
smtp_tls_scert_verifydepth = 5
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_use_tls = yes
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
smtpd_recipient_restrictions = permit_mynetworks, reject_invalid_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unknown_sender_domain, reject_unknown_recipient_domain, reject_unauth_destination
smtpd_tls_ask_ccert = yes
smtpd_tls_req_ccert = no
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
tls_random_source = dev:/dev/urandom
transport_maps = hash:/etc/postfix/transport