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
显而易见的解决方案是在参数中放入$myhostname
linuxmachine.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