我按照这个教程configurationPostfix + Dovecot与虚拟用户(在MySQL数据库中): https : //www.digitalocean.com/community/tutorials/how-to-configure-a-mail-server-using-postfix-dovecot –mysql-和spamassasin
我可以创build一个用户(在数据库中添加一行),然后这个用户可以连接一个电子邮件客户端(使用IMAP)。 问题是,用户不能接收电子邮件(我试图发送电子邮件从另一个用户,所以本地电子邮件)。
我已经创build了两个用户, bla和salut ,域isp6.lab (我在主机isp6.lab添加到127.0.0.1,本地testing没有问题从这边)。
/var/log/mail.log如下所示:
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))
在我的/etc/dovecot/conf.d/10-mail.conf中,我有这行mail_location:
mail_location = maildir:/var/mail/vhosts/%d/%n
并在我的/etc/dovecot/conf.d/auth-sql-conf.ext(只是一个示例,而不是完整的文件):
userdb { driver = static args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n }
当我去/var/mail/vhosts/isp6.lab,我看到我的2个用户的文件夹是这样的:
ls /var/mail/vhosts/isp6.lab bla salut
因此,我的用户可以login,他们有他们的电子邮件文件夹在系统上,但不知何故,他们不能收到任何电子邮件,因为他们“不存在”。
如有需要,随时向我咨询其他信息,我已经到处寻找,但无法find我的问题的原因。
编辑:debugging日志给更多的信息:
当从bla发送电子邮件给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)
这似乎是一个SQL查询是为了find用户,但没有任何密码(当然,发件人没有接收者的密码),所以用户没有find。 没有查询应该做,因为我已经build立了userdb是静态的,不应该有任何查询来查找用户。 我想我可以通过添加一个user_query临时解决。
PS:我的密码查询来自这个(与MySQL PASSWORD兼容): http : //wiki2.dovecot.org/AuthDatabase/SQL#Password_verification_by_SQL_server
PPS:第二个SQL请求是针对反弹消息的,它不能成功反弹以告知邮件无法传递。
我终于find了解决办法。 Postfix被configuration为在数据库中查看用户存在以传递电子邮件,所以Dovecot在接收到来自Postfix的电子邮件时不应该这样做。
这就是它应该如何工作,以及我们为什么定义一个静态的user_db的原因。 它错过了一个参数,所以Dovecot不会检查用户是否存在,因为Postfix已经做到了:
/etc/dovecot/conf.d/auth-sql.conf.ext(只有有用的部分):
userdb { driver = static args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n allow_all_users=yes }
添加allow_all_users=yes参数解决了这个问题。