Итак, следующая проблема. Я пытаюсь настроить почтовый сервер, примерно следуя этому руководству: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-virtual-mailbox-domains.cf
user = mailuser
password = <pw>
hosts = mailserver
query = SELECT 1 FROM virtual_domains WHERE name='%s'
mysql-virtual-alias-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/Цитата_есть параграф об этой практике.