Eu segui este tutorial para configurar o Postfix + Dovecot com usuários virtuais (em um banco de dados mysql): link
Eu posso criar um usuário (adicionar uma linha no banco de dados) e, em seguida, esse usuário pode se conectar a um cliente de email (usando o IMAP). O problema é que o usuário não pode receber e-mails (tentei enviar e-mails de um usuário para outro, então e-mails locais).
Eu criei dois usuários, bla
e salut
, com o domínio isp6.lab
(adicionei os hosts mail.isp6.lab a 127.0.0.1, nenhum problema deste lado para testes locais).
O /var/log/mail.log tem esta aparência:
Oct 5 13:43:28 debianR postfix/lmtp[6346]: 4284485120: to=<[email protected]>, relay=mail.isp6.lab[private/dovecot-lmtp], delay=0.12, delays=0.08/0/0/0.04, dsn=5.1.1, status=bounced (host mail.isp6.lab[private/dovecot-lmtp] said: 550 5.1.1 <[email protected]> User doesn't exist: [email protected] (in reply to RCPT TO command))
No meu /etc/dovecot/conf.d/10-mail.conf, eu tenho essa linha para o mail_location:
mail_location = maildir:/var/mail/vhosts/%d/%n
E no meu /etc/dovecot/conf.d/auth-sql-conf.ext (apenas um exemplo, não o arquivo completo):
userdb {
driver = static
args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
}
Quando vou para /var/mail/vhosts/isp6.lab, vejo as pastas dos meus 2 usuários assim:
ls /var/mail/vhosts/isp6.lab
bla
salut
Para que meus usuários possam fazer login, eles têm suas pastas de e-mail no sistema, mas, de alguma forma, não podem receber nenhum e-mail porque "não existem".
Sinta-se à vontade para me solicitar outras informações, se necessário, procurei em todos os lugares, mas não consigo encontrar a causa do meu problema.
EDIT: os logs de depuração estão fornecendo mais informações:
Ao enviar um email de bla
para salut
:
Oct 05 15:12:22 auth: Debug: auth client connected (pid=0)
Oct 05 15:12:22 auth: Debug: client in: AUTH 1 LOGIN service=smtp nologin lip=192.168.1.2 rip=192.168.1.3 secured
Oct 05 15:12:22 auth: Debug: client out: CONT 1 VXNlcm5hbWU6
Oct 05 15:12:22 auth: Debug: client in: CONT 1 YmxhQGlzcDYubGFi
Oct 05 15:12:22 auth: Debug: client out: CONT 1 UGFzc3dvcmQ6
Oct 05 15:12:22 auth: Debug: client in: CONT 1 YmxhYmxh
Oct 05 15:12:22 auth-worker(7448): Debug: sql([email protected],192.168.1.3): query: SELECT NULL AS password, 'Y' as nopassword, email AS user FROM accounts WHERE email = '[email protected]' AND pass = password('***********')
Oct 05 15:12:22 auth: Debug: client out: OK 1 [email protected]
Oct 05 15:12:22 lmtp(7467): Debug: none: root=, index=, control=, inbox=, alt=
Oct 05 15:12:22 lmtp(7467): Info: Connect from local
Oct 05 15:12:22 auth: Debug: master in: USER 1 [email protected] service=lmtp
Oct 05 15:12:22 auth-worker(7448): Debug: sql([email protected]): query: SELECT NULL AS password, 'Y' as nopassword, email AS user FROM accounts WHERE email = '[email protected]' AND pass = password('')
Oct 05 15:12:22 auth-worker(7448): Info: sql([email protected]): unknown user
Oct 05 15:12:22 auth: Debug: master out: NOTFOUND 1
Oct 05 15:12:22 lmtp(7467): Debug: auth input:
Oct 05 15:12:22 lmtp(7467): Info: Disconnect from local: Client quit (in reset)
Oct 05 15:12:22 lmtp(7467): Debug: none: root=, index=, control=, inbox=, alt=
Oct 05 15:12:22 lmtp(7467): Info: Connect from local
Oct 05 15:12:22 auth: Debug: master in: USER 2 [email protected] service=lmtp
Oct 05 15:12:22 auth-worker(7448): Debug: sql([email protected]): query: SELECT NULL AS password, 'Y' as nopassword, email AS user FROM accounts WHERE email = '[email protected]' AND pass = password('')
Oct 05 15:12:22 auth-worker(7448): Info: sql([email protected]): unknown user
Oct 05 15:12:22 auth: Debug: master out: NOTFOUND 2
Oct 05 15:12:22 lmtp(7467): Debug: auth input:
Oct 05 15:12:22 lmtp(7467): Info: Disconnect from local: Client quit (in reset)
Parece que uma consulta SQL é feita para localizar o usuário, mas sem nenhuma senha (obviamente, o remetente não tem a senha do destinatário), portanto o usuário não foi encontrado. Nenhuma consulta deve ser feita como eu configurei o userdb para ser estático, não deve haver qualquer consulta para encontrar os usuários. Eu acho que poderia resolver temporariamente adicionando um user_query.
PS: minha consulta de senha vem disso (para ser compatível com o MySQL PASSWORD): link
PPS: a segunda solicitação de sql é para a mensagem de retorno, que retorna sem sucesso para informar que o e-mail não pôde ser entregue.