当我尝试在 postfix 服务器上向同一域中的地址发送电子邮件时(例如,如果服务器主机名是 mail.example.com,而我尝试发送电子邮件至[电子邮件保护]),我在日志中收到以下错误,并且电子邮件未送达:Recipient address rejected: User unknown in local recipient table
。如果我发送到另一个域上的地址,则不会出现任何问题。这是我的 /etc/postfix/main.cf 文件:
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
readme_directory = no
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.
myhostname = mail.example.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
#myorigin = /etc/mailname
myorigin = $mydomain
mydestination = $mydomain, localhost.$mydomain, localhost
relayhost =
#fake IP address
mynetworks = 127.0.0.0/8 100.837.191.223
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
答案1
我知道这个问题有点老了,所以我认为它已经得到了令人满意的解答。
我刚刚遇到了同样的问题,我花了一段时间才弄清楚发生了什么。我认为我的情况与原始问题相同。
Postfix 应该中继全部邮件发送到互联网上的其他服务器,它实际上并不接收任何域的邮件。因此,发送到 example.com 的任何邮件都应转发到 example.com 的邮件服务器。正如 techieb0y 所解释的那样,解决方案是从以下行中删除 $mydomain:
mydestination = $mydomain, localhost.$mydomain, localhost
这行告诉 postfix 任何发送到 $mydomain 的消息都将被接收并存储在这服务器。这不是我想要的,我希望这些消息被发送到 example.com 的实际邮件服务器。一旦我意识到这一点,并删除 example.com,邮件就会按我预期的方式工作。我发布这篇文章,希望这个解释能帮助将来遇到这个问题的其他人。
答案2
错误非常直观:目标电子邮件用户名(@ 符号左侧)无法映射到系统上的本地用户(默认 Postfix 设置),也无法映射到虚拟域(因为没有配置任何现成的域)。尝试执行此映射的决定由“mydestination”中的域列表(以及任何虚拟域)控制。如果此机器实际上是域的主 MX,则不存在的用户的邮件会损坏。如果此框只需要发送外发邮件,只需从 mydestination 中删除目标域(通过从列表中删除 $mydomain)就足够了——它仍将直接接受邮件[电子邮件保护],但消息[电子邮件保护]将通过 MX 查找过程来传递到其他地方。您可以通过设置传输映射(针对单个域)或配置智能主机(针对所有邮件)来简化此过程。
答案3
当你向本地域发送邮件时,postfix 负责检查收件人是否存在。当你向任何其他域发送电子邮件时,postfix 没有这样的责任。
您需要有一个名为 test 的本地用户
useradd -s /bin/bash -d /home/test -U test
或者,你需要在 /etc/aliases 中为 test 设置一个本地用户的别名
echo "test: root" >> /etc/aliases
postalias /etc/aliases
您应该一切就绪了。
答案4
向/etc/postfix/main.cf
文件添加行local_recipient_maps =
,对,并且值为空(默认情况下该值是活动的并且非空,这就是为什么需要添加该行作为空值)