那麼,出現以下問題。我正在嘗試按照本教程鬆散地設置郵件伺服器:https://workaround.org/ispmail/wheezy/
當我嘗試發送第一個測試郵件(在系統內部)時,問題開始了,我得到以下資訊:
postfix/pickup[15883]: F34B965841CF: uid=1000 from=<webmaster>
postfix/cleanup[15907]: F34B965841CF: [email protected]>
postfix/qmgr[15884]: F34B965841CF: from=<[email protected]>, size=398, nrcpt=1 (queue active)
dovecot: auth-worker(15911): Warning: mysql: Query failed, retrying: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '@example.org.' at line 1
dovecot: auth-worker(15911): Error: sql([email protected]): Password query failed: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '@example.org.' at line 1
dovecot: lda: Error: user [email protected]: Auth USER lookup failed
dovecot: lda: Fatal: Internal error occurred. Refer to server log for more information.
postfix/pipe[15909]: F34B965841CF: to=<[email protected]>, relay=dovecot, delay=0.02, delays=0.01/0/0/0.02, dsn=4.3.0, status=deferred (temporary failure)
問題是,在本教學的前面部分,您應該手動嘗試您的 sql 查詢是否可以使用
postmap -q example.org mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
等等。對我來說,它確實有效。完全沒問題。
我的文件看起來與教程中的幾乎一模一樣
mysql-虛擬信箱-domains.cf
user = mailuser
password = <pw>
hosts = mailserver
query = SELECT 1 FROM virtual_domains WHERE name='%s'
mysql-虛擬別名-maps.cf
user = mailuser
password = <pw>
hosts = mailserver
query = SELECT destination FROM virtual_aliases WHERE source='%s'
等等。有人以前遇到過這種情況嗎?有什麼解決方案或想法嗎?
答案1
根據日誌,失敗的是password_query
dovecot 發出的。
來自教程https://workaround.org/ispmail/wheezy/setting-up-dovecot
逐字貼上的查詢是:
password_query = SELECT email as user, password FROM virtual_users WHERE email=’%u’;
周圍的引號%u
是 Unicode 奇特引號,而不是普通的 ASCII 引號。這是錯誤的,它解釋了為什麼如果您像我上面那樣複製和貼上了該查詢,查詢就會失敗。它們必須替換為普通的單引號,如下所示:
password_query = SELECT email as user, password FROM virtual_users WHERE email='%u';
通常,這是教程使用的發布平台的錯誤,使用過濾器自動用花哨的引號替換正常的引號。發佈程式碼時這是完全錯誤的。https://en.wikipedia.org/wiki/Quotation_mark有一段關於這種做法的內容。