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

本文探讨了在使用PHP脚本通过mail函数发送邮件时遇到的两个主要问题:1) mail函数发送邮件失败;2) 使用sendmail发送邮件过程中的速度缓慢问题。在实际操作中,开发者可能需要检查服务器配置、邮件设置以及SMTP服务器连接等,以确保邮件能够成功且及时地发送。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       最近在学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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值