博主把自己的博客搬到了本地,可是无意中发现邮件通知没有。什么回复留言,博主从来没有收到过,还以为是主题什么问题,排查了好久,发现主题一切正常,万般无奈之下测试了本地mail(),结果出乎意料,原来一切根源就在这个函数根本就没有启用。问题是找到了,怎么解决呢,博主找啊找,终于找到解决办法,现分享出来,给和我一样的人:


环境与工具

1.win7 64位
2.phpstudy(初学者推荐工具) 包含php5.3、sendmail(没有的话可网上下)
3.两个QQ号 一个发一个收(我只有QQ邮箱,所以没测试其他邮箱,如163等)

具体方法

1、需要用到mail函数,大家可以调用<? php phpinfo(); ?>来查看自己的服务器是否支持这个函数。这里mail邮件函数是 PHP 核心的组成部分。无需安装即可使用这些函数。
2、作为邮件发送方的QQ必须开启SMTP服务,不开启是无法实现在php脚本中使用该QQ邮箱实现邮箱发送的。具体如何设置可到网上百度。(这里博主给一张图,想必你看了就明白了)

mail

3、25号端口用于SMTP,如果被占用或被防火墙禁止访问,我想也是会失败的。虽然我在实践的时候没出问题,但是如果出问题,这方面还是应该考虑一下。(防火墙高级里面有自定义新建端口,这里不做阐述)
4、php.ini配置如下(打开查找修改,目录改成自己的):

SMTP = smtp.qq.com
smtp_port = 25
mail.add_x_header = On
sendmail_path="F:phpStudy\tools\sendmail\sendmail.exe -t"

特别说明:
sendmail_path便是你的sendmail的路径,网上有说,该路径不宜过长,也不知道我这个算不算长,反正没出问题。我们知道,在php.ini所做的修改要想生效,都得重启apache。在实践中,由于种种原因(例如在运行中的项目,不可能轻易让你重启),负责服务器的家伙99%不让你改配置文件,但我们又要实现某些功能,又不知道相关配置是否符合要求,那咋办?还好,php为我们提供了ini_set()这样的函数,顾名思义,通过该函数可以在php脚本中动态的修改php.ini配置。当然这种配置只在当前脚本有效。(据说有些php.ini的配置不能php.ini外更改,这和相关配置的可修改范围有关)
5、sendmail.ini配置如下

smtp_server=smtp.qq.com
smtp_port=25
smtp_ssl=auto
error_logfile=error.log //建议开启(将前面的分号去掉),便于查找问题
debug_logfile=debug.log //建议开启(将前面的分号去掉),便于查找问题
auth_username=*****@qq.com
//发送邮件的QQ邮箱号
auth_password=*****
//邮箱密码
force_sender=*****@qq.com
//要同上上

force_sender该配置网上有说可以随意,填不填都行。不知道在实际操作中我的哪些行为出错了,反正我不填,或乱填都会失败。查看sendmail文件夹的error.log文件,可以看到这样的提示“mail from address must be same as authorization user”,翻译一下,大概意思是“邮件从地址必须同授权用户的一样”。所以,force_sender的值必须与auth_username的值时一样的。如果你的邮件发送也失败,那可以试着修改这里。

测试代码

完成以上步骤我们现在测试下,在网站根目录建mail.php,插入一下代码

然后用域名加mail.php打开测试或者127.0.0.1/mail.php,看是否能发送成功!

总结

最终能实现发送邮件,但有可能看到这些邮件都会被腾讯判定为垃圾邮件放到垃圾箱中,不知道他是怎么判定的,我们的程序又该如何修改,才能解决该问题(网上也没找到具体方案)。还有在查资料的过程中有说可以搭建自己的邮件服务器,感觉好高大上,有时间去了解下。第一次写博客,只是感觉自己花了时间去做的事,应该总结总结,万一以后用到,可以更方便的查找。

正文到此结束

留言

0条评论

LEAVE A REPLY

  • face face face face face face face face face face face face face face face face face face face face face face face face face