無法建立遠端 imap 連接,為什麼不呢?
遠端 CentOS 7 網路伺服器能夠成功接收從 Internet 上其他地方發送到 me@mydomain.com 的電子郵件。在同一 CentOS 7 伺服器上執行的應用程序能夠使用 JavaMail 與儲存傳入消息的 dovecot Maildir 建立 IMAP 連接。 那麼,為了讓我的 devbox 上執行的 Thunderbird 能夠通過 Internet 與遠端 CentOS 7 伺服器建立 IMAP 連接,我必須添加什麼?
至此,我添加
imaps
到了firewalld的公共區域。我還確認 dovecot.conf 包含該行protocols = imap pop3
。我將 Thunderbird 配置為使用 IMAP 接收郵件,以 mydomain.com 作為主機名,埠為 993,SSL 使用普通密碼。我在我的域名註冊商的網站上確認了 dns mx 條目使用 mydomain.com 作為 mx 地址。編輯
為了回答@Celada 的問題,我發布了 Thunderbird 給出的對話框,表明它在嘗試確認我的登錄資訊時無法連接到伺服器。當我為 imap 指定埠 993 和為 smtp 指定埠 25 以及指示 SSL 連接時,我得到相同的資訊。此外,將 .mydomain.com 更改為 mydomain.com 並不能消除登錄失敗。
接下來我將嘗試訪問 firewalld 日誌並發布結果。我的理解是firewalld不會自動登錄,所以我得開發一些豐富的規則。確定正確的語法可能需要一些時間。
我認為這是一個伺服器配置問題。我猶豫是否要顯示 Thunderbird 對話框,因為我不想給人以這是客戶端問題的印象。我認為需要先確定/設置伺服器配置,然後才能設置 Thunderbird。
編輯#2
根據@Celada 的建議,我輸入
telnet localhost 143
並得到以下回复:Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. * OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE STARTTLS LOGINDISABLED] Dovecot ready.
我也輸入
telnet localhost 25
了,然後得到以下回复:Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 mydomain.com ESMTP Postfix
這些 telnet 結果指出,firewalld 將 imaps 和 smtp 映射到了錯誤的埠,所以我鍵入
nano /usr/lib/firewalld/services/imaps.xml
並將埠從 993 更改為 143。然後我鍵入nano /usr/lib/firewalld/services/smtp.xml
並將埠更改為 25。然後我輸入
firewall-cmd --reload
以確保更改生效。接下來,我將新資訊放入 Thunderbird 並再次嘗試測試連接,但再次收到如下對話框所示的失敗消息:
請注意,我在我的域名註冊商處檢查了 DNS 中的 MX 記錄,它正是
mydomain.com
,如螢幕截圖所示。我不明白這怎麼無關緊要。我做了檢查,伺服器上的主機名也是mydomain.com
. 我應該檢查其他一些資源以確認正確的郵件伺服器名稱嗎?另請注意,dovecot 和 postfix 是使用標準配置安裝的。我沒有明確配置 ssl 來使用它們,儘管 SSL 可能是預設配置的一部分。但是,我確實更改了上面對話框中的設置並測試了在 SSL 欄位中指定None的連接,但得到了相同的失敗消息。
在上面最近的(底部)螢幕截圖之後,/var/log/maillog 中的 dovecot 日誌是:
Feb 27 00:52:57 mydomain dovecot: imap-login: Aborted login (no auth attempts in 0 secs): user=<>, rip=my.DEVBOX.ip.addr, lip=my.SERVER.ip.addr, session=<YsH2egsQAABi9AyF>
編輯#3
按照@Bandrami 的建議,我將
protocols = imap pop3
dovecot.conf 更改為protocols = imaps pops
. 然後我確保/usr/lib/firewalld/services/imaps.xml
指定埠 993。我鍵入firewall-cmd --reload
然後systemctl stop dovecot
重新systemctl start dovecot
啟動伺服器上的相關程序。然後,我將 Thunderbird 測試配置為指定埠 993 和 SSL/TLS,並在 Thunderbird 中重新執行連接測試,結果在 Thunderbird 中得到相同的結果。但是,dovecot 日誌更加明確,如下所示:
Feb 27 01:18:20 mydomain dovecot: config: Warning: NOTE: You can get a new clean config file with: doveconf -n > dovecot-new.conf Feb 27 01:18:20 mydomain dovecot: config: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:26: 'imaps' protocol can no longer be specified (use protocols=imap). to disable n$ Feb 27 01:18:38 mydomain dovecot: imap-login: Disconnected (no auth attempts in 18 secs): user=<>, rip=my.SERVER.ip.addr, lip=127.0.0.1, TLS handshaking: SSL_accept() failed: error:14$ Feb 27 01:19:15 mydomain dovecot: master: Warning: Killed with signal 15 (by pid=1 uid=0 code=kill) Feb 27 01:19:15 mydomain dovecot: anvil: Warning: Killed with signal 15 (by pid=1 uid=0 code=kill) Feb 27 01:19:15 mydomain dovecot: ssl-params: Warning: Killed with signal 15 (by pid=1 uid=0 code=kill) Feb 27 01:19:15 mydomain dovecot: config: Warning: Killed with signal 15 (by pid=1 uid=0 code=kill) Feb 27 01:19:15 mydomain dovecot: auth: Error: read(anvil-auth-penalty) failed: EOF Feb 27 01:19:15 mydomain dovecot: auth: Error: net_connect_unix(anvil-auth-penalty) failed: Permission denied Feb 27 01:19:15 mydomain dovecot: auth: Warning: Killed with signal 15 (by pid=1 uid=0 code=kill) Feb 27 01:19:15 mydomain dovecot: log: Warning: Killed with signal 15 (by pid=1 uid=0 code=kill) Feb 27 01:19:22 mydomain dovecot: master: Dovecot v2.2.10 starting up for pop3, imap (core dumps disabled) Feb 27 01:19:44 mydomain dovecot: imap-login: Disconnected (no auth attempts in 15 secs): user=<>, rip=my.SERVER.ip.addr, lip=127.0.0.1, TLS handshaking: SSL_accept() failed: error:14$ Feb 27 01:23:55 mydomain postfix/qmgr[30121]: 2C915811BD1C: from=<me@mydomain.com>, size=5316, nrcpt=1 (queue active) Feb 27 01:23:58 mydomain postfix/smtp[27144]: 2C915811BD1C: to=<address@domain_that_sends_to_this_addresson_server.com>, relay=none, delay=290245, delays=290241/0.02/3.6/0, dsn=4.4.3, status=deferred (Host or domain$ Feb 27 01:24:41 mydomain dovecot: config: Warning: NOTE: You can get a new clean config file with: doveconf -n > dovecot-new.conf Feb 27 01:24:41 mydomain dovecot: config: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:26: 'imaps' protocol can no longer be specified (use protocols=imap). to disable n$ Feb 27 01:24:41 mydomain dovecot: config: Warning: NOTE: You can get a new clean config file with: doveconf -n > dovecot-new.conf Feb 27 01:24:41 mydomain dovecot: config: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:26: 'imaps' protocol can no longer be specified (use protocols=imap). to disable n$ Feb 27 01:24:53 mydomain dovecot: imap-login: Disconnected (no auth attempts in 12 secs): user=<>, rip=my.SERVER.ip.addr, lip=127.0.0.1, TLS handshaking: SSL_accept() failed: error:14$ Feb 27 01:25:05 mydomain dovecot: imap-login: Aborted login (no auth attempts in 1 secs): user=<>, rip=my.DEVBOX.ip.addr, lip=my.SERVER.ip.addr, TLS, session=<Kdrl7QsQxwBi9AyF> Feb 27 01:27:16 mydomain dovecot: master: Warning: Killed with signal 15 (by pid=1 uid=0 code=kill) Feb 27 01:27:16 mydomain dovecot: anvil: Warning: Killed with signal 15 (by pid=1 uid=0 code=kill) Feb 27 01:27:16 mydomain dovecot: log: Warning: Killed with signal 15 (by pid=1 uid=0 code=kill) Feb 27 01:27:24 mydomain dovecot: master: Dovecot v2.2.10 starting up for pop3, imap (core dumps disabled) Feb 27 01:27:24 mydomain dovecot: config: Warning: NOTE: You can get a new clean config file with: doveconf -n > dovecot-new.conf Feb 27 01:27:24 mydomain dovecot: config: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:26: 'imaps' protocol can no longer be specified (use protocols=imap). to disable n$
編輯#4
根據@Celada 的進一步說明,我
telnet imap.mydomain.com 143
在用於 Thunderbird 測試的本地 devbox 中輸入了 ,終端回复:Trying my.SERVER.ip.addr... Connected to imap.mydomain.com. Escape character is '^]'. * OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE STARTTLS LOGINDISABLED] Dovecot ready.
接下來,我在
openssl s_client -CApath /etc/ssl/certs -starttls imap -port 143 -host imap.mydomain.com
devbox 終端上輸入,終端通過列印詳細資訊進行回复,您可以通過點擊此連結到文件共享站點來閱讀這些詳細資訊。我的完整dovecot.conf 可以通過點擊此連結在文件共享站點上閱讀。
編輯#5
根據@Celada 的建議,我
t1 login USERNAME PASSWORD
在 之後輸入. OK Pre-login capabilities listed, post-login capabilities have more.
,終端回復如下:* CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS SPECIAL-USE BINARY MOVE t1 OK Logged in
但是,我隨後重複了 Thunderbird 登錄測試,並檢查以強制 Thunderbird 使用埠 143 和“普通密碼”。當我這樣做時,Thunderbird 強制“自動檢測”作為 SSL 選項,然後點擊“重新測試”按鈕導致相同的錯誤消息:
"Thunderbird failed to find the settings for your email account."
經過一些來回評論和聊天后,OP的問題現在得到了解決。需要將 IMAP 伺服器指定為imap.mydomain.com而不是mydomain.com ,儘管出於某種原因,這僅在使用高級帳戶設置設置時才有效,而不是使用帳戶創建對話框。
除了提到這種針對特定情況的解決方案之外,我認為在回答這個問題時我能說的最有用的是列出一些關於該主題的通用故障排除技巧,希望它們對稍後閱讀本文的其他人有用.
- Thunderbird 自動檢測帳戶設置的功能非常棒,並且對電子郵件帳戶設置的黑暗日子有很大的改進,當時 ISP 必須提供冗長的指令,包括從伺服器類型(POP 或 IMAP)到埠號到身份驗證協議的所有內容。在理想的世界中,使用者只需要指定他們的電子郵件地址、密碼,也許我猜到伺服器名稱(畢竟這就是他們通過網路訪問 gmail 所需要的全部……)。
然而,當自動檢測功能不起作用時,您幾乎不會收到任何有用的錯誤消息。“Thunderbird 未能找到您的電子郵件帳戶的設置”基本上沒有任何意義。
提示:當 Thunderbird 的自動檢測功能不起作用時,不要在上面浪費時間,而是手動指定所有內容,直到它起作用。然後,一旦你讓它工作,你就可以集中精力找出自動檢測失敗的原因,並可能修復它,以便它可以為下一個使用者工作。
- 如果可以,請始終將埠 143 用於 IMAP。SSL 上的 IMAP 也有 993 埠,但所有相當現代的客戶端和伺服器都支持 STARTTLS 以將未加密的連接升級到加密的連接,因此實際上不再需要擔心 IMAP 的不同埠。如果可能,將自動加密埠 143 上的連接。
- (與 IMAP 無關,但無論如何)如果可以,請始終將埠 587 用於 SMTP。SMTP 過去總是在埠 25 上完成,但 ISP 經常因為垃圾郵件而阻塞埠 25。埠 587 專門用於 MUA 和郵件伺服器之間的 SMTP 通信,預計將在必要時支持 SMTP AUTH 和 STARTTLS,並且已經存在多年。很少需要擔心將 MUA 配置為使用任何其他埠。
- Dovecot 以不同的方式處理未加密連接和加密連接,這也可能適用於本地連接(到或
localhost
)與遠端連接。最常見的身份驗證類型在未加密的遠端連接上是不安全的,因此 Dovecot 不提供它們。127.0.0.1``::1
因此,在通過命令行進行測試和調試時,為了最接近地模擬真實的 MUA,遠端測試並使用 STARTTLS 加密連接。否則,您可能會發現身份驗證工作正常,
telnet
但仍然想知道為什麼它在 MUA 上不起作用。
- 使用
telnet
(對於未加密的連接)或openssl s_client
(對於加密的連接)進行測試使用您試圖讓 MUA 接受的相同主機名。如果您希望
imap.mydomain.com
或mail.mydomain.com
只是mydomain.com
在指定為 MUA 中的郵件伺服器時工作,請從命令行使用相同的主機名進行測試。如果您收到主機名解析錯誤,您就知道問題出在 DNS 上。openssl s_client -starttls imap -port 143 -CApath /etc/ssl/certs -host <hostname>
- 如果 Dovecot 伺服器上配置的 SSL 證書有問題,Thunderbird 會發出警告,但它仍然允許您連接。如果您完全無法連接,則證書可能不是問題。
當然,一旦您準備好投入生產,您將需要使用由公認的證書頒發機構簽名的證書,並且證書上的名稱與在 MUA 中配置的 IMAP 伺服器名稱相匹配。
- 用於測試的有用 IMAP 命令。
telnet
將這些輸入到您使用(未加密)或openssl s_client
(加密)打開的 IMAP 會話中tag1 LOGOUT tag2 LOGIN <username> <password> tag3 CAPABILITIES tag4 LIST "" "*"