中继后面的 Postfix 使用 /etc/aliases 处理传入和传出的邮件

中继后面的 Postfix 使用 /etc/aliases 处理传入和传出的邮件

postfix我正在尝试在 Linux 机器(Debian 8 和 Postfix 2.11)上进行设置。但在/etc/aliases正常工作时遇到了一些麻烦。

设置如下:MS Exchange 服务器是实际的邮件服务器 - 它接收邮件并发送邮件,并且与 Linux 计算机位于同一本地网络中。Linux 计算机上的 Postfix 确实使用此 Exchange 计算机作为中继主机来发送邮件。这有效,因此例如到达。mail [email protected]

现在 Exchange 上有一个邮件地址,该地址被转发到 Linux 机器。/etc/aliases我有一个别名,它是程序的管道,因为发往该地址的邮件包含一些应该由程序解析的代码。

为了使它工作,我必须更改mydestination中的设置main.cf。但是一旦我这样做,Postfix 就会在/etc/aliases使用 的别名时停止转发邮件。只有输入长名称才有效。这是我的配置(我从零开始):

# main.cf
# our internet domain name (the thing after the "@")
mydomain = example.com

# this is the critical setting
mydestination = linuxmachine, 192.168.1.200, $mydomain

# IP of Exchange
relayhost = 192.168.1.100

# so that addresses look correct
masquerade_domains = $mydomain

# in order to make the pipe programm work with correct permission
default_privs = myuser

通过此配置,传入邮件的管道可以正常工作,但向别名发送邮件却不起作用:

# /etc/alias
# none of the entries are actual users on the linux machine!

#works when mail to [email protected] comes from external through Exchange to Linux
parser: |/home/user/programname 

# command "mail external" does not work! It sends to external@linuxmachine"
external: [email protected] 

如果我注释掉mydestination中的行,main.cf则会mail external向 发送邮件[email protected](邮件已到达),但传入邮件[email protected]不会通过管道发送。所以,正好相反。

我必须输入什么main.cf才能/etc/aliases使用短名称从我的 Linux 机器发送邮件,同时能够通过管道接收邮件?我想要的只是在 Linux 机器上解析一个特殊地址,并且 Linux 用户能够使用短名称作为“奢侈品”将邮件发送到选定的地址(而不必输入完整的电子邮件地址)。

更新: postconf -n输出:

config_directory = /etc/postfix
default_privs = myuser
masquerade_domains = $mydomain
mydestination = linuxmachine, 192.168.1.200, $mydomain
mydomain = example.com
relayhost = 192.168.1.100

更新 2:使用上述设置/var/log/mail.info执行mail external(邮件发送至别名)时的输出:mydestination

Jun 19 10:45:27 linuxmachine postfix/smtp[26425]: 6DFE02003AD: to=<[email protected]>, orig_to=<external>, relay=192.168.1.100[192.168.1.100]:25, delay=0.24, delays=0/0/0/0.24, dsn=2.6.0, status=sent (250 2.6.0 <[email protected]> [InternalId=162319] Queued mail for delivery)

更新 3,mydestination根据建议的答案进行更改后,mail.info执行下列操作时日志会显示以下行mail external

Jun 19 16:07:31 linuxmachine postfix/smtp[2299]: B562720039C: to=<[email protected]>, orig_to=<external>, relay=192.168.1.100[192.168.1.100]:25, delay=2.6, delays=0/0/0/2.5, dsn=2.6.0, status=sent (250 2.6.0 <[email protected]> [InternalId=162971] Queued mail for delivery)

答案1

显而易见的解决方案是在参数中放入$myhostnamelinuxmachine.example.com 。mydestination

解释

在修改配置之前,这是通过以下方式发送电子邮件后的后台事件mail external

  • Postfix 通过拾取服务接收电子邮件。
  • 由于收件人没有域部分和(默认)参数append_at_myorigin有值yes,则 postfix 将把收件人地址重写为[电子邮件保护](您可以在上面的 mail.log 中看到它)
  • 默认情况下,参数mydestination具有值$myhostname或 linuxmachine.example.com,因此 postfix 在 中应用别名映射/etc/aliases
  • Postfix 别名[电子邮件保护][电子邮件保护]然后将其发送到 gmail 主机

修改配置后,情况如下

  • Postfix 通过拾取服务接收电子邮件。
  • 由于收件人没有域部分和(默认)参数append_at_myorigin有值yes,则 postfix 将把收件人地址重写为[电子邮件保护](您可以在上面的 mail.log 中看到它)
  • 现在mydestination不包含$myhostname或 linuxmachine.example.com,因此 postfix 不会在/etc/aliases

相关内容