在网站上很多地方都需要发送邮件,如用户的激活,找回密码等,因此发送邮件是站点的基本需要。之前使用虚拟主机构建站点的时候用phpmailer通过smtp协议来发送邮件。现在有了自己的服务器,就可以考虑自己搭建服务器来发送邮件,好处一是发送人可以设置为诸如‘admin@example.com’之类增加可信度,另外一个则是能够提高发送邮件的速度。

sendmail是linux系统下著名的邮件收发软件。服务器系统是ubuntu 10.04LTS,下面说一下安装和配置的过程,以备后用。

  1. 安装sendmail:  
    sudo apt-get install sendmail sendmail-cf
  2. 配置sendmail:
    • 添加本地域名:
      sudo vim /etc/mail/local-host-names

      在文件里面输入域名, 例如:

      tlanyan.pp.ua
    • 修改submit.cf文件:
      sudo vim /etc/mail/submit.cf

      找到行 #Dj$w.Foo.COM,修改为:

      Djtlanyan.pp.ua

      注意域名前加Dj是其格式(具体没查是什么意思)

    • 添加域名MX(Mail eXchanger)记录, 这部分应该在域名提供商的控制面板里面更改。
  3. 重启服务:
     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.pp.ua 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.pp.ua'

注意-t -i选项应该在-f前面,否则无效。-f指定邮件的发件人,而不是显示”由 xxx 代发”的字眼。

这样一来sendmail和php都配置好了,接下里就是在网页脚本里调用mail函数即可。