本地帐户的混合 gmail MX + postfix

kru*_*unk 5 linux postfix gmail

这是设置:

我们有一个域 mydomain.com。一切都在我们自己的服务器上,除了通过 gmail 的通用电子邮件帐户。

目前 gmail 被设置为 MX 记录。

服务器还有各种电子邮件别名,它需要支持错误跟踪器等。例如 bugs@mydomain.com |/path/to/issuetracker.script

我正在努力进行设置,该设置允许在本地和来自用户的电子邮件客户端进行以下操作。

  1. guser1 - 有一个 Gmail 帐户和一个本地帐户
  2. guser2 - 只有一个 Gmail 帐户
  3. 错误 - 在 /etc/aliases 中有一个管道别名用于问题跟踪器

场景

  • 从本地主机(cron 等)发送到 guser1@mydomain.com 的邮件需要转到 gmail 帐户
  • 从本地主机邮寄到 guser2@mydomain.com
  • 发送到 bugs@mydomain.com 的邮件需要通过管道传输到本地问题跟踪器脚本

因此,第一个尝试是创建运输地图。在这种情况下,我们的服务器将设置为 MX 和 guser* 目标电子邮件发送到 gmail。将 gmail 用户放在地图中,如下所示:

guser1@mydomain.com smtp:gmailsmtp:25
guser2@mydomain.com smtp:gmailsmtp:25
Run Code Online (Sandbox Code Playgroud)

问题:

  • 忽略 guser1+extension@mydomain.com 等扩展名
  • 仅在 append_at_myorigin = no 时有效(如果设置为 yes,gmail 拒绝连接:E4C7E3E09BA3:to=,relay=none,delay=0.05,delays=0.02/0.01/0.02/0,dsn=4.4.1,status=deferred (连接到 gmail-smtp-in.l.google.com[209.85.222.57]:25:连接被拒绝))
  • 由于 append_at_myorigin 设置为 no,所有收到的电子邮件都有(未知发件人)

第二个步骤是在 /etc/aliases 中设置显式本地主机别名,并在 mydomain 上进行域范围的转发。这也需要将本地服务器设置为 MX:

root: root@localhost
# transport
mydomain.com smtp:gmailsmtp:25
Run Code Online (Sandbox Code Playgroud)

问题: * 如果我为匹配“$myhostname”的域创建传输映射,则永远不会解析别名文件。因此,当本地用户(或守护进程)发送电子邮件时,如:

mail -s "testing" root < text.txt
Run Code Online (Sandbox Code Playgroud)

Postfix 忽略 /etc/alias 条目并映射到 root@mydomain.com 并尝试将其发送到 gmail 传输映射。

第三刺:

为错误创建一个子域,例如 bugs.mydomain.com。将此域的 MX 设置为本地服务器,并将 mydomain.com 的 MX 保留给 Gmail 服务器。

问题: * 不能解决本地帐户的问题。因此,当错误跟踪器响应来自 guser1@mydomain.com 的电子邮件时,它使用本地传输并且用户永远不会收到电子邮件。

% 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
Run Code Online (Sandbox Code Playgroud)

And*_*asM 2

切换到虚拟。阅读 postfix 的虚拟文档。这样你就有了更多的控制权。

主要.cf:

virtual_alias_maps = hash:/etc/postfix/virtual
virtual_mailbox_maps = hash:/etc/postfix/virtualmailboxmap
virtual_mailbox_domains = mydomain.com
virtual_transport = local:
Run Code Online (Sandbox Code Playgroud)

virtual,列出您拥有的所有用户

localuser  localuser
somealias  localuser
guser1     guser1@gmail.mydomain.com,guser1
bugs       issuetracker@issuetracker.mydomain.com
Run Code Online (Sandbox Code Playgroud)

virtualmailboxmap,列出所有本地用户,右侧并不重要!

 localuser   rhsunused
 guser1      rhsunused
Run Code Online (Sandbox Code Playgroud)

运输:

 mydomain.com      local:
 gmail.mydomain.com smtp:gmailsmtp:25
 issuetracker.mydomain.com smtp:[issuetracker ip]:25
Run Code Online (Sandbox Code Playgroud)

我有一个赛勒斯:本地帐户的传输。我知道这并不是您所有问题的完整答案,但这可能是一个开始。