在网站上很多地方都需要发送邮件,如用户的激活,找回密码等,因此发送邮件是站点的基本需要。之前使用虚拟主机构建站点的时候用phpmailer通过smtp协议来发送邮件。现在有了自己的服务器,就可以考虑自己搭建服务器来发送邮件,好处一是发送人可以设置为诸如‘admin@example.com’之类增加可信度,另外一个则是能够提高发送邮件的速度。
sendmail是linux系统下著名的邮件收发软件。服务器系统是ubuntu 10.04LTS,下面说一下安装和配置的过程,以备后用。
- 安装sendmail:
sudo apt-get install sendmail sendmail-cf
- 配置sendmail:
- 添加本地域名:
sudo vim /etc/mail/local-host-names
在文件里面输入域名, 例如:
tlanyan.me
- 修改submit.cf文件:
sudo vim /etc/mail/submit.cf
找到行 #Dj$w.Foo.COM,修改为:
Djtlanyan.me
注意域名前加Dj是其格式(具体没查是什么意思)
- 添加域名MX(Mail eXchanger)记录, 这部分应该在域名提供商的控制面板里面更改。
- 添加本地域名:
- 重启服务:
sudo service sendmail restart
经过这几步之后sendmail服务已经配置好,就支持收发邮件。但是注意目前的配置只允许本机用户(127.0.0.1)收发邮件,而且发信的速度会很慢。默认的发信人是 username@hostname,username为系统的当前登陆用户,hostname是服务器的主机名。这样发出去的邮件极大的可能被认为是垃圾邮件而拒收。经过测试gmail能接收,但是139邮箱就拒收。详细信息可以查看记录文件,默认为: /var/log/mail.log
通过查看记录,同样可以找到发信慢的原因,那就是 hostname不能被解析。所以需要在host文件里加入hostname的支持:
sudo vim /etc/hosts
解析本机地址:
127.0.0.1 tlanyan.me localhost hostname
从国外的论坛上看到这个顺序比较重要,应该按照这个格式解析本机地址。
经过这样设置,发送邮件的速度应该提高许多, 如果还需要更好的速度,可以使用 djbdns这个软件利用缓存的dns提高速度。
配置好邮件服务器之后,接下来就是应用了。修改php的配置让其mail使用内置的sendmail来发送邮件:
sudo vim /etc/php5/apache2/php.ini
找到 sendmail_path,修改为:
sendmail_path=/usr/sbin/sendmail -t -i -f'admin@tlanyan.me'
注意-t -i选项应该在-f前面,否则无效。-f指定邮件的发件人,而不是显示”由 xxx 代发”的字眼。
这样一来sendmail和php都配置好了,接下里就是在网页脚本里调用mail函数即可。