您的位置:首页 > 编程语言 > PHP开发

php脚本中利用mail函数发送邮件及问题归纳

2016-01-19 20:22 791 查看
       最近在学php脚本语言,书中有一个实例:服务器端将浏览器发送的信息通过php脚本,利用mail函数发送到一个邮箱。自己讲书中实例代码上传至服务器,在浏览器上填写表单,并提交后,邮箱迟迟收不到邮件。

1、php中mail函数发送邮件失败问题

      邮箱收不到邮件是因为mail函数发送邮件失败了。php中mail函数是一个自带的发邮件的函数,但是如果你真的要使用mail函数来发邮件那必须是要给你系统安装sendmail组件才可以。
      先使用以下命令检查是否已安装sendmail:
    rpm –q sendmail

      检测结果确实未安装该组件,果断安装:
       yum install sendmail
      安装完成之后还要去检查了下php.ini配置,里面需要修改相关参数,找到php.ini文件并用vim打开,找到sendmail_path
所在行。发现是未启用,去掉前面的分号";",并将其改为:
                                     
        sendmail_path = /usr/sbin/sendmail -t –i

有的系统可能默认是sendmail_path = /usr/sbin/sendmail -t -i -f,这个-f 看来是让mail函数停用了,去掉-f后mail函数工作恢复正常。
       然后重启sendmail:service sendmail restart
       重新测试php脚本,发现现在可以正常发送邮件了,但是有一个新的问题:发送邮件很慢。

2、sendmail发送邮件很慢的问题

       从网上搜索本问题,会搜出一大堆的解决方案来,大致思路如下:
       查看错误日志,cat /var/log/maillog,发现这么一段日志:



       大致意思是:sendmail无法确认主机名。此时可以输入如下命令:cat
/etc/hosts     内容如下:
127.0.0.1 localhost

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

10.144.163.27 iZ28koenlrmZ
       因为iZ28koenlrmZ这个主机名是属于10.144.163.27的,但同时,也是属于127.0.0.1的,而在这个hosts文件里,127.0.0.1是不拥有这个主机名。但通过查看服务器服务监听情况,输入命令 netstat
-anpo | grep sendmail



发现sendmail监听的是127.0.0.1,但却无法确认主机名iZ28koenlrmZ(因为在服务器上/etc/sysconfig/network文件里记录的HOSTNAME是

iZ28koenlrmZ ),所以发送邮件就非常慢了。

       所以,需要把iZ28koenlrmZ这个主机名同时也加到127.0.0.1上面,然后重启sendmail。
       哈哈!也许这就是网上众多解决方案中的一部分吧。。。,但是,问题好像并没有解决,发送有时候还是很慢呀!而且启动sendmail也很慢。。。好吧,又开始一轮新的搜索资料,嘿嘿!网上又说了终极解决方案如下:
        sendmail和sm-client都是MTA,只认网络主机名,即在主机名后面加上.localdomain(或者直接写成网站域名,如admin.slyar.com这样的),而我之前那篇文章直接添加iZ28koenlrmZ,不符合网络主机名规范,所以启动速度慢。因此需要修改两处,一处是/etc/sysconfig/network,另一处是/etc/hosts,只修改一处是不够的。
         /etc/hosts                          将127.0.0.1所处的行改为:127.0.0.1 主机名.localdomain localhost

其中127.0.0.1 是本地环路地址,主机名.localdomain 是主机名(hostname),也就是要修改的。localhost 是主机名的别名(alias),它会出现在Konsole的提示符下。
        /etc/sysconfig/network        将HOSTNAME=localhost.localdomain (如果是默认的话),修改为你的主机名。
        以上两个文件只有系统重启后才能生效,若不想重启,可直接用命令:hostname 主机名,即可临时更改主机名。好了,这下可以重启sendmail了,发现果然变快了。
  
注:以上方法同样可以解决(1)centos 启动时候的sendmail 、sm-client等待长久;(2)sendmail 报错

当然,解决上述问题的方法也可以放弃使用sendmail,利用 Postfix 替换 sendmail 组件,因为据说 Postfix 的效率更高些。具体设置可参考:http://www.cmhello.com/lnmp-centos-postfix.html

题注:以上内容参考网上资料进行整理而成,如有错误,敬请指正,谢谢!!!

       http://free.yes81.net/yes81/view-10954.html                                                  http://iwww.me/74.html http://www.ailab.cn/article/2015082029540.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: