[Review Board] 寄信時出現 SMTP AUTH extension not supported by server 錯誤訊息

[Review Board] 寄信時出現 SMTP AUTH extension not supported by server 錯誤訊息

今天在設定 Review Board 的寄信功能,

不過信件一直寄不出來…

從 reviewboard.log 裡面,

看到 SMTP AUTH extension not supported by server 這個錯誤訊息:

2019-06-05 05:29:24,582 - ERROR -  - root - Failed to send test e-mail.
Traceback (most recent call last):
  File "/opt/venv/local/lib/python2.7/site-packages/reviewboard/admin/forms.py", line 736, in save
    fail_silently=False)
  File "/opt/venv/local/lib/python2.7/site-packages/django/core/mail/__init__.py", line 50, in send_mail
    connection=connection).send()
  File "/opt/venv/local/lib/python2.7/site-packages/django/core/mail/message.py", line 276, in send
    return self.get_connection(fail_silently).send_messages([self])
  File "/opt/venv/local/lib/python2.7/site-packages/django/core/mail/backends/smtp.py", line 87, in send_messages
    new_conn_created = self.open()
  File "/opt/venv/local/lib/python2.7/site-packages/django/core/mail/backends/smtp.py", line 54, in open
    self.connection.login(self.username, self.password)
  File "/usr/lib/python2.7/smtplib.py", line 586, in login
    raise SMTPException("SMTP AUTH extension not supported by server.")
SMTPException: SMTP AUTH extension not supported by server.

 

嗯… 我設定的是一台 relay.testdomain.com,

在舊的 Review Board 上可以運作,

沒道理在新建立的 Review Board 上就不行…

 

直接用 netcat 打打看 SMTP 協定吧~

連上之後,先下個 EHLO 打聲招呼,

郵件伺服器就回傳了支援的指令回來:

root@7ba54830d8fe:/# nc -v relay.testdomain.com 25

relay.testdomain.com [11.22.33.44] 25 (smtp) open
220 ESMTP Postfix

EHLO client.testdomain.com
250-relay02.testdomain.com
250-PIPELINING
250-SIZE 34603008
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

 

試試幾個 SMTP 裡驗證身分相關的指令 (wikipedia: SMTP AUTH),

結果都是 authentication not enabled:

AUTH PLAIN
503 5.5.1 Error: authentication not enabled

AUTH LOGIN
503 5.5.1 Error: authentication not enabled

AUTH CRAM-MD5
503 5.5.1 Error: authentication not enabled

 

真是奇怪,看起來好像驗證的功能沒有開?

再用 Python 的 smtplib 模組來試試,

執行 ehlo() 後取得的資訊是相同的:

>>> import smtplib
>>> s = smtplib.SMTP("relay.testdomain.com", 25)
>>> s.ehlo()
(250, 'relay02.testdomain.com\nPIPELINING\nSIZE 34603008\nETRN\nSTARTTLS\nENHANCEDSTATUSCODES\n8BITMIME\nDSN')

 

可以啟用 TLS:

>>> s.starttls()
(220, '2.0.0 Ready to start TLS')

 

使用 login() 登入時就出現一樣的錯誤:

>>> s.login("testuser@testdomain.com", "password")
Traceback (most recent call last):
  File "", line 1, in 
  File "/usr/local/Cellar/python@2/2.7.16/Frameworks/Python.framework/Versions/2.7/lib/python2.7/smtplib.py", line 586, in login
    raise SMTPException("SMTP AUTH extension not supported by server.")
smtplib.SMTPException: SMTP AUTH extension not supported by server.

 

問了一下設定舊 Review Board 的同事,

說這台 mail relay 伺服器是不需要帳號密碼的… (?!)

實驗了一下,也確實不需要登入,就能寄信成功:

>>> s.sendmail("testuser@testdomain.com", ["testuser@testdomain.com"], "From: testuser@testdomain.com\nSubject:subject\nhihi test")

 

回到 Review board 上的 Email 設定頁,

看到目前使用者名稱/密碼是有值的:

 

但等等,我不可能是用 admin 登入郵件伺服器的,

這也不像是我輸入的設定,

是怎麼回事呢?

 

研究了一下,終於搞清楚,

那個使用者名稱/密碼呈現藍色狀態,

因為那是 Chrome 的表單自動填入 (或是我在用的 LastPass)。

當我再勾選「Send a test email」並儲存時,

被自動填入的帳號密碼,就被拿去試著登入郵件伺服器。

但這台伺服器根本不支援登入,登入的功能鐵定失敗。

 

後來,將使用者名稱與密碼欄位都清空,

再勾選「Send a test email」並儲存,信件就成功寄出來了~

 

經此一事,發現表單自動填入的功能其實也要很小心,

它可能填錯的值,會導致後面連環的錯誤啊~Orz

 

參考資料:

SMTP AUTH extension not supported by server : Forums : PythonAnywhere

Ticket 3658: Email Notification Not being sent: Server is trying to use TLS even if is OFF, Test email succeeds | Splat

(本頁面已被瀏覽過 2,414 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料