为了开发目的,我想要一个 smtp 服务器,它只是将所有邮件放入本地邮箱。为了实现这一点,我尝试设置一个最小的 postfix 系统。
# master.cf
smtp inet n - n - - smtpd
cleanup unix n - n - 0 cleanup
qmgr unix n - n 300 1 qmgr
rewrite unix - - n - - trivial-rewrite
bounce unix - - n - 0 bounce
defer unix - - n - 0 bounce
trace unix - - n - 0 bounce
verify unix - - n - 1 verify
error unix - - n - - error
retry unix - - n - - error
discard unix - - n - - discard
local unix - n n - - local
scache unix - - n - 1 scache
proxymap unix - - - - 1 proxymap
postlog unix-dgram n - n - 1 postlogd
# main.cf
compatibility_level = 3.7
queue_directory = /var/spool/postfix
command_directory = /usr/bin
daemon_directory = /usr/lib/postfix/bin
data_directory = /var/lib/postfix
mail_owner = postfix
inet_protocols = ipv4
unknown_local_recipient_reject_code = 550
mydestination = localhost
alias_maps = regexp:{{/.*/ mytargetuser@localhost}}
alias_database = $alias_maps
与 smtpd 通信没有问题。整个对话过程中我都得到了成功的响应,但最后,postfix 尝试使用smtp
未启用的方法来传递邮件:
postfix/smtpd: connect from myhost.mydomain[127.0.0.1]
postfix/smtpd: 8D548E40850: client=myhost.mydomain[127.0.0.1]
postfix/cleanup: 8D548E40850: message-id=<20220506145639.8D548E40850@myhost>
postfix/qmgr: 8D548E40850: from=<[email protected]>, size=408, nrcpt=1 (queue active)
postfix/qmgr: warning: connect to transport private/smtp: Connection refused
postfix/error: 8D548E40850: to=<[email protected]>, relay=none, delay=30, delays=30/0/0/0.01, dsn=4.3.0, status=deferred (mail transport unavailable)
有什么线索吗,为什么它alias_maps
没有像我打算在这里使用它那样工作?
答案1
参考(本地)别名映射后确定目的地是当地的。
但是你告诉 Postfix 这只是localhost
本地目的地,你还需要调整你的mydestination
设置。如果任何目的地是本地的,这应该可以解决问题:
mydestination=static:all
- 还可以考虑设置
relay_transport=error
以使配置意图和错误处理立即显而易见。您不想使用这样的配置进行中继。 - 考虑保留
inet_protocols
未设置(默认)并设置inet_interfaces=loopback-only
为仅服务于正在运行的系统的客户端。您不想通过这样的配置接收来自更广阔的互联网的邮件。