Postfix 错误:未找到主机或域名

Postfix 错误:未找到主机或域名

我正在使用 Raspbian,并且 Postfix(版本 2.9.6)服务似乎在我启动时自动运行,但如果我想发送邮件,电子邮件就会停留在队列中:

$ mailq
26CB72201F    443 Sat Sep 19 19:44:17   [email protected]
(Host or domain name not found. Name service error for name=smtp.gmail.com type=A: Host not found, try again)
                                        [email protected]

如果我重新启动服务(sudo service postfix restart),那么电子邮件将一直有效,直到下次启动。

为什么?有什么区别?

在 Postfix 安装期间,我选择了“带有智能主机的 Internet”配置,但随后我按照“...Internet 站点”教程完成了配置,所以这可能是问题所在(?)我只想发送电子邮件。

更新:问题可能是在连接 Wi-Fi 之前运行了 Postfix。

答案1

简短的回答。

如果出现“主机未找到,请重试。”,则可能意味着您的服务器存在 DNS 解析问题,或者 Postfix 本身存在 DNS 解析问题。但这正是需要清理的核心。

至于如何解决,您的问题没有提供足够的有关您的基本操作系统或设置的详细信息,因此无法给出简洁的答案。如果您正在运行,则您似乎正在运行 Ubuntu/Debian sudo service postfix restart,但您还能提供哪些其他详细信息?

较长的答案。

resolv.conf可能与神秘失踪有关。

根据错误:

未找到主机或域名。name=smtp.gmail.com 的名称服务错误类型=A:未找到主机,请重试。

看起来你正在使用 Gmail 的 SMTP 服务器来发送邮件。不确定你的操作系统是什么,但基于Ubuntu 论坛上的这个答案resolv.conf这似乎是重启时缺失的问题;粗体强调是我的:

我在 Ubuntu 14.04 LTS 上遇到了同样的问题。安装 postfix 后,它会复制/etc/resolv.conf/var/spool/postfix/etc/resolve.conf。但由于某种原因,在重新启动后,文件不会被复制,你得到的是只有标题的空白文件。

建议的临时解决方案是将主操作系统复制resolv.conf到 Postfix 的目录:

sudo cp /etc/resolv.conf /var/spool/postfix/etc/resolv.conf

看起来这不是一个永久性的解决办法但至少值得检查一下。

可能与设置有关inet_protocols

Server Fault 上的这个答案解释了一个类似的情况,重点是 IPv6 支持。很确定您的问题与 IPv6 无关,因为错误与 IPv4 的“type=A”记录有关,而对于 IPv6,它将是“type=AAAA”。但话虽如此,可能值得尝试调整inet_protocolsPostfix 配置文件中的设置。以下是 Postfix 官方文档的解释:

当通过 inet_protocols 参数启用 IPv4 支持时,Postfix 将查找 DNS 类型 A 记录,并将 IPv4-in-IPv6 客户端 IP 地址 (::ffff:1.2.3.4) 转换为其原始 IPv4 形式 (1.2.3.4)。后者在 IPV6_V6ONLY 支持 (RFC 3493) 之前的主机上是必需的。

当通过 inet_protocols 参数启用 IPv6 支持时,Postfix 将执行 DNS 类型 AAAA 记录查找。

当同时启用 IPv4 和 IPv6 支持时,Postfix SMTP 客户端将选择 smtp_address_preference 参数指定的协议。2.8 之前的 Postfix 版本会先尝试通过 IPv6 进行连接,然后再尝试使用 IPv4。

例子:

  • inet_protocols = ipv4
  • inet_protocols = all (默认)
  • inet_protocols = ipv6
  • inet_protocols = ipv4, ipv6

假设您使用的是 Ubuntu/Debian 设置,请在此处打开配置:

sudo nano /etc/postfix/main.cf

并查找或设置该行的值inet_protocols

inet_protocols = ipv4

或者是这样的:

inet_protocols = all

然后重新启动 Postfix 服务(或整个服务器),看看是否可以解决问题:

sudo service postfix restart

答案2

问题在于 Postfix/etc/resolv.conf在连接 WiFi 前会进行检查,因此/var/spool/etc/postfix/resolv.conf启动后一直为空,无法发送邮件。

为了解决这个问题,我禁用了 postfix 服务:

sudo update-rc.d postfix disable

…我编写了这个脚本来等待 Wi-Fi 连接结束后再启动 Postfix(保存在/usr/local/bin/postfix_wifi.sh):

#!/usr/bin/sh

host="smtp.gmail.com"
port=587

until nc $host $port -w 5
do
    sleep 10
done

sudo service postfix start
exit 0

...我添加了此行/etc/rc.local以便脚本在启动时运行:

/usr/local/bin/postfix_wifi.sh &

答案3

对我来说这是 AWS SES 的错误:

未找到主机或域名。name=email-smtp.us-west-2.amazonaws.com 的名称服务错误,类型=AAAA:未找到主机,请重试

我可以通过在安装 postfix 后立即告诉 Postfix 使用 Google DNS 来解决此问题:

echo 'nameserver 8.8.8.8' >> /var/spool/postfix/etc/resolv.conf

相关内容