在我的专用服务器上,我安装了 Postfix 以便通过网站发送电子邮件。我的一位客户将他们的电子邮件托管在第三方,因此我们在域上设置了 MX 记录。
但是,当从服务器发送任何 Postfix 电子邮件时,他们收不到电子邮件。我认为由于域指向服务器本身,它会尝试向自己发送邮件,但服务器上没有任何东西可以处理该域的电子邮件。(其他域的邮件帐户运行良好。)
如何让 Postfix 使用域的 MX 记录发送电子邮件?服务器是带有标准 LAMP 堆栈的 Ubuntu 8.10。我安装了 Webmin,并安装了主机提供的名为“Matrix”的控制面板。
编辑:如果我尝试从自己的地址发送电子邮件,我会收到来自邮件传递系统的错误电子邮件,其中包含以下错误:
<[email protected]>: user unknown. Command output: Invalid user specified.
Final-Recipient: rfc822; [email protected]
Action: failed
Status: 5.1.1
Diagnostic-Code: x-unix; Invalid user specified.
以下是所做的日志条目:
Jan 6 18:06:52 localhost postfix/pickup[29006]: 0329D3F69: uid=33 from=<[email protected]>
Jan 6 18:06:52 localhost postfix/cleanup[30495]: 0329D3F69: message-id=<[email protected]>
Jan 6 18:06:52 localhost postfix/qmgr[22461]: 0329D3F69: from=<[email protected]>, size=611, nrcpt=2 (queue active)
Jan 6 18:06:52 localhost postfix/pipe[30497]: 0329D3F69: to=<[email protected]>, relay=maildrop, delay=0.15, delays=0.1/0/0/0.04, dsn=5.1.1, status=bounced (user unknown. Command output: Invalid user specified. )
Jan 6 18:06:52 localhost postfix/smtp[30498]: 0329D3F69: to=<[email protected]>, relay=gmail-smtp-in.l.google.com[209.85.227.27]:25, delay=0.61, delays=0.1/0.01/0.06/0.45, dsn=2.0.0, status=sent (250 2.0.0 OK 1294337212 o18si30528441wbo.103)
Jan 6 18:06:52 localhost postfix/cleanup[30495]: 868723F75: message-id=<[email protected]>
Jan 6 18:06:52 localhost postfix/bounce[30500]: 0329D3F69: sender non-delivery notification: 868723F75
Jan 6 18:06:52 localhost postfix/qmgr[22461]: 868723F75: from=<>, size=2553, nrcpt=1 (queue active)
Jan 6 18:06:52 localhost postfix/qmgr[22461]: 0329D3F69: removed
Jan 6 18:06:52 localhost postfix/pipe[30497]: 868723F75: to=<[email protected]>, relay=maildrop, delay=0.06, delays=0.01/0/0/0.05, dsn=2.0.0, status=sent (delivered via maildrop service)
Jan 6 18:06:52 localhost postfix/qmgr[22461]: 868723F75: removed
答案1
所以,我在工作中感到无聊,想提一下以下内容。我以前从未使用过这个网站,所以请原谅我。
对于其中一个答案,您随后评论道:
“好的,我有 virtual_mailbox_domains = $transport_maps 和 transport_maps = hash:/etc/postfix/transport。该文件中有一行内容为 condorproperties.co.uk maildrop: - 我应该删除该行吗?– DisgruntledGoat 昨天”
然后接着:
“@Devdas:我尝试删除该行并重新启动 Postfix,但问题并未解决,我是否需要将“maildrop”更改为其他内容?– DisgruntledGoat 昨天”
第一个问题的答案是“是”。/etc/postfix/transport 中的那行强制本地邮件投递(通过 maildrop)以发送发往 condorproperties.co.uk 的电子邮件。删除它是最合适的。问题是,仅仅重新启动 postfix 不足以应用更改。
问题是,配置文件中配置的映射是一个哈希:/etc/postfix/transport。文件 /etc/postfix/transport 是该文件的人类可读版本,并且应该具有相应的 /etc/postfix/transport.db(已编译的哈希映射)文件。您使用命令 postmap 将人类可读版本编译为哈希版本。Postfix 会检查修改时间,并且应该在您的日志文件中大声抱怨 /etc/postfix/transport.db 已过期。您需要做的就是运行 postmap /etc/postfix/transport,以便您之前所做的更改(删除包含 condorproperties.co.uk 的行)生效。事实上,我认为您甚至不必在发出 postmap 命令后重新加载 postfix 即可使更改生效,但这不会有什么坏处。
长话短说,运行 postmap /etc/postfix/transport 然后运行 postfix reload。
干杯。
顺便说一句,日志文件中的重要线索是这一行:1 月 6 日 18:06:52 localhost postfix/pipe[30497]: 0329D3F69: to=, reply=maildrop, delay=0.15, delays=0.1/0/0/0.04, dsn=5.1.1, status=bounced (用户未知。命令输出:指定了无效的用户。)
请注意,在中间位置,哪里写着relay=maildrop?
答案2
您能将 postconf -n 粘贴到这里吗?
我敢打赌,您在 mydestination、virtual_mailbox_domains 或 reply_domains 之一中明确列出了 mydomain.co.uk,并使用了 maildrop 传输。
据我所知,ring0 的想法是正确的,但对问题的解析是错误的。目标是让服务器上某个域的电子邮件发送到其他地方,但它仍留在 Postfix 上。
任何邮件服务器的本地配置都会覆盖 DNS。因此,如果您的 MTA 没有查看 DNS,则您的本地配置中就有域。
答案3
postfix
遵循标准并执行域名的MX条目解析,以便找出下一步要联系哪个服务器来传输邮件。
您可能会遇到由于域名(区域)的 TTL 而导致的问题,例如,您在注册商处更新了 MX 条目,但该域的 TTL 使得先前解析的条目保留在域名服务器的缓存中。
此外,目标服务器上的域名可能未声明为当地的,使得服务器拒绝邮件(例如,参见日志
/var/log/mail.log
),因为您的发送服务器正试图通过该目标服务器(mydestination
在/etc/postfix/main.cf
)中继(垃圾邮件)。
尝试dig +nocmd mydomain.tld mx +noall +answer
获取易于阅读的信息,包括您所关注的域的 TTL。
答案4
还要检查您是否没有为要发送邮件到的远程域定义任何自定义传输或传输映射。