cle*_*toy 6 email services postfix
我正在使用 Raspbian,并且 Postfix(版本 2.9.6)服务在我启动时似乎会自动运行,但是如果我想发送邮件,电子邮件会保留在队列中:
$ mailq
26CB72201F 443 Sat Sep 19 19:44:17 user@mail.example.com
(Host or domain name not found. Name service error for name=smtp.gmail.com type=A: Host not found, try again)
someone@gmail.com
Run Code Online (Sandbox Code Playgroud)
如果我重新启动服务 ( sudo service postfix restart),则电子邮件会一直工作到下次启动。
为什么?有什么不同?
在 Postfix 安装过程中,我选择了配置“Internet with smarthost”,但随后我按照…Internet Site 的教程完成了配置,所以这可能是问题(?)我只想发送电子邮件。
更新:问题可能是在连接 Wi-Fi 之前运行 Postfix。
Gia*_*968 16
出现“找不到主机,请重试”。这可能意味着您的服务器存在 DNS 解析问题,或者 Postfix 本身存在 DNS 解析问题。但这是必须清理的核心。
至于如何清除它,您的问题没有提供有关基本操作系统或设置的足够详细信息,无法给出简洁的答案。如果您正在运行sudo service postfix restart,您似乎正在运行 Ubuntu/Debian ,但您还能提供哪些其他详细信息?
resolv.conf神秘消失有关。基于错误:
找不到主机或域名。name=smtp.gmail.com type=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
Run Code Online (Sandbox Code Playgroud)
这似乎不是永久性修复,但至少它值得一试。
inet_protocols设置有关。这个关于服务器故障的答案也解释了一个类似的情况,它侧重于 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 版本在尝试使用 IPv4 之前尝试通过 IPv6 进行连接。
例子:
- inet_protocols = ipv4
- inet_protocols = 全部(默认)
- inet_protocols = ipv6
- inet_protocols = ipv4, ipv6
假设您使用的是 Ubuntu/Debian 设置,请在此处打开配置:
sudo nano /etc/postfix/main.cf
Run Code Online (Sandbox Code Playgroud)
并找到(或将值)设置为该inet_protocols行:
inet_protocols = ipv4
Run Code Online (Sandbox Code Playgroud)
或者是这样的:
inet_protocols = all
Run Code Online (Sandbox Code Playgroud)
然后重新启动 Postfix 服务——或整个服务器——看看是否能解决问题:
sudo service postfix restart
Run Code Online (Sandbox Code Playgroud)
问题在于 Postfix/etc/resolv.conf在连接 WiFi 之前进行检查。因此,/var/spool/etc/postfix/resolv.conf开机后一直为空,无法发送邮件。
为了解决这个问题,我禁用了 postfix 服务:
\n\nsudo update-rc.d postfix disable\nRun Code Online (Sandbox Code Playgroud)\n\n\xe2\x80\xa6,我编写了这个脚本来等待 Wi-Fi 连接结束,然后再启动 Postfix(保存在 中/usr/local/bin/postfix_wifi.sh):
#!/usr/bin/sh\n\nhost="smtp.gmail.com"\nport=587\n\nuntil nc $host $port -w 5\ndo\n sleep 10\ndone\n\nsudo service postfix start\nexit 0\nRun Code Online (Sandbox Code Playgroud)\n\n\xe2\x80\xa6and 我添加了这一行,/etc/rc.local以便脚本在启动时运行:
/usr/local/bin/postfix_wifi.sh &\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
57144 次 |
| 最近记录: |