更新:我尝试在数据库中以纯文本形式插入密码。这有效,我现在也可以发送邮件了。我尝试再次设置整个过程(使用提到的指南),但结果相同。有什么想法吗?
原始问题:只需按照以下步骤设置 Postfix / Courier 包本教程。我以前使用过这个教程,但这次我在发送电子邮件时遇到了问题。我的主要问题是我不知道在哪里寻找导致此错误的线索。Mail.log 只给了我以下几行,
Apr 21 17:38:50 gordon postfix/smtpd[5059]: connect from xxx.xx-xxx-xx.my.isp.carrier[xx.xxx.xx.xxx]
Apr 21 17:38:51 gordon imapd: LOGIN, [email protected], ip=[::ffff:xx.xxx.xx.xxx], port=[57701], protocol=IMAP
Apr 21 17:38:51 gordon postfix/smtpd[5059]: warning: xxx.xx-xxx-xx.my.isp.carrier[xx.xxx.xx.xxx]: SASL LOGIN authentication failed: authentication failure
搜索时发现“身份验证失败”是一个非常通用的错误消息,可能由许多不同的错误引起 - 这使得像我这样的新手更难以找到问题所在。
系统
- Ubuntu 12.04
- 后缀
- 导游
- 带有 SSL 和 TLS 的 SASL
- 垃圾邮件杀手
- ClamAV
- 阿马维斯
答案1
在里面上面有教程链接,作者使用了 CRYPT 哈希算法。这个事实可以在 SQL 查询中看到:
INSERT INTO `user` (`email`, `password`, `name`) VALUES ("[email protected]", ENCRYPT("adminpassword"), "Administrator");
Saslauthd 使用 pam-mysql 来验证用户身份,因此我们需要配置 pam-mysql 以使用相同的哈希算法。配置文件定义在/etc/pam.d/smtp
auth required pam_mysql.so user=mail passwd=mailpassword host=127.0.0.1 db=mail table=user usercolumn=email passwdcolumn=password crypt=1
account sufficient pam_mysql.so user=mail passwd=mailpassword host=127.0.0.1 db=mail table=user usercolumn=email passwdcolumn=password crypt=1
该参数很重要,crypt
因为它指定了加密用户密码的方法
- 0(或“纯文本”)= 不加密。密码以纯文本形式存储。强烈不建议这么做。
- 1(或“Y”)= 使用 crypt(3) 函数
- 2(或“mysql”)= 使用 MySQL PASSWORD() 函数。pam-mysql 使用的加密函数可能与 MySQL 服务器的加密函数不同,因为 pam-mysql 使用 MySQL 的 C 客户端 API 中定义的函数,而不是在查询中使用 PASSWORD() SQL 函数。
- 3(或“md5”)= 使用 MySQL MD5() 函数
因此,如果您需要使用加密密码进行身份验证,请设置crypt
参数以使其与您的原始查询相匹配。
另一个重要参数是verbose
。您可以将其设置为 1,这样您就可以知道 pam-mysql 正在做什么。