因配置邮件发送服务器需要,开始配置sendmail,其中自然就涉及到 SMTP认证的配置。
FreeBSD系统本身已经安装了sendmail,不过因 需要SMTP认证功能,所以一切都要重新配置。
其实整个配置过程到也不是很复杂,基本上按照 FreeBSD的配置手册上做就可以。
详见:http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/smtp-auth.html
不过其中有几个需要特别注意的地方:
1、因为我的需求没有太多用户需要管理,也不想邮件用户和系统用户混在一起,所以我采用的事默认的 Berkeley DB 来存储用户信息,这里如果按照默认的配置就无法实现用户的验证(此问题花了半天的时间才搞定)。
需要修改saslauthd 的启动脚本 /usr/local/etc/rc.d/saslauthd
将 saslauthd_flags=${saslauthd_flags:-"-a pms"} 改为 saslauthd_flags=${saslauthd_flags:-"-a sasldb"}
这样 saslauthd 才会使用 /usr/local/etc/sasldb2.db 的用户信息文件来验证用户登录。
2、因为需要重新make sendmail 时需要修改 /etc/make.conf 文件
这里我也碰到一个问题:重新make出来的 sendmail 启动时无法加载 SASL2,
Warning: Option: AuthMechanisms requires SASL support (-DSASL)
尝试多次后均没有解决问题。最后试着把 /etc/make.conf 文件中的其他配置项全部删除后重新make,终于启动成功。
附上我的最后make成功的 make.conf 文件内容(与上面的配置文档不太一样,应该都可以)
PERL_VERSION=5.10.1
SENDMAIL_CFLAGS+= -I/usr/local/include -DSASL=2
SENDMAIL_LDFLAGS+= -L/usr/local/lib
SENDMAIL_LDADD+= -lsasl2
另:重新编译生成的 sendmail 文件的目录在 /usr/libexec/sendmail/ 下。
如果使用原来的路径文件还是会报上面的错误。
可直接修改 sendmail 启动脚本 /etc/rc.d/sendmail
将 command=${sendmail_program:-/usr/sbin/${name}} 修改为:
command=${sendmail_program:-/usr/libexec/sendmail/${name}}
3、最后一个问题就是 /etc/mail/freebsd.mc 文件
我最后使用的事在该配置文件的后面加上
dnl set SASL options
TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 EXTERNAL LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 EXTERNAL LOGIN
PLAIN')dnl
因为文档中所提供的认证方式没有包含我们正在使用的认证方式,其实其他的两个认证方式 DIGEST-MD5 CRAM-MD5 也可以去掉。留给大家自己去尝试吧。
4、 对于不用验证就可以发送邮件的配置
修改 /etc/mail/access
添加:
Connect:10.0 RELAY
注:在8.1 版本中使用 Connect:10.0 OK 配置实测无效
生成db文件
makemap hash /etc/mail/access.db < /etc/mail/access
重启 sendmail 服务。
本次配置sendmail花了我一天的时间,在网上查阅相关文档无数,但真正有帮助的却很少,可能个人遇到的问题也都不经相同吧。
其实现在想想真正有帮助的还是安装包里带有的README以及man帮助啦!
也希望本文对碰到相同问题的同行有所帮助!