題 後綴錯誤:找不到主機或域名


我正在使用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

如果我重新啟動服務(sudo service postfix restart)然後電子郵件工作,直到下次啟動。

為什麼?有什麼不同?

在Postfix安裝期間,我選擇配置“Internet with smarthost”,但後來我按照“Internet站點”的教程“完成配置,這可能是問題(?)我只是想發送電子郵件。

更新: 問題可能是在連接Wi-Fi之前運行Postfix。


4
2017-09-19 17:56


起源


我想知道,這個服務器名稱是否可能在系統啟動時解析,但您的名稱服務器無法訪問? - Thomas Weinbrenner
這解決了我: unix.stackexchange.com/a/272512/195308 - Peter Becich


答案:


更短的答案。

如果“找不到主機,請重試。”這可能意味著您的服務器出現DNS解析問題,或者Postfix本身存在DNS解析問題。但這是必須清理的核心。

至於如何清理它,你的問題沒有提供關於你的基本操作系統或設置的足夠細節,以提供簡潔的答案。如果你正在運行,你似乎正在運行Ubuntu / Debian sudo service postfix restart,但你能提供什麼其他細節?

更長的答案。

可能連接到 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

這似乎不是一個永久的修復,但至少它是值得一試的東西。

可能連接到 inet_protocols 設置。

這個答案在Server Fault上 解釋了類似的情況,側重於IPv6支持。很確定你的問題不是與IPv6有關的,因為錯誤是關於“type = A”記錄,這是IPv4,而對於IPv6,它將是“type = AAAA”。但是,說,可能值得嘗試調整 inet_protocols 在Postfix配置文件中設置。以下是Postfix官方文檔的解釋:

通過inet_protocols參數Postfix啟用IPv4支持時   將查找DNS類型A記錄,並將轉換IPv4-in-IPv6客戶端   IP地址(:: ffff:1.2.3.4)到其原始IPv4格式(1.2.3.4)。   在IPV6_V6ONLY支持之前的主機上需要後者(RFC   3493)。

通過inet_protocols參數Postfix啟用IPv6支持時   將執行DNS類型AAAA記錄查找。

啟用IPv4和IPv6支持時,Postfix SMTP客戶端   將選擇smtp_address_preference指定的協議   參數。 2.8之前的Postfix版本嘗試通過IPv6連接   在嘗試使用IPv4之前。

例子:

  • inet_protocols = ipv4
  • inet_protocols = all(DEFAULT)
  • 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

12
2017-09-19 18:29





問題是Postfix檢查 /etc/resolv.conf 在連接WiFi之前。因此, /var/spool/etc/postfix/resolv.conf 啟動後保持空白,無法發送郵件。

為了解決這個問題,我禁用了後綴服務:

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 &

2
2017-09-20 19:24



非常非常棒!很酷,看到你自己解決了這個問題。 - JakeGould
謝謝!這個解決方案和你的解決方案一樣,為我解決了這個問題: unix.stackexchange.com/a/272512/195308 - Peter Becich