Wordpress的环境是LNMP环境,在探针里测试发送邮件,失败了。已经确定mail()函数是开启的,于是乎,Google一下,发现 李思章 的方法不错,Mark一下。
注意
博主自己使用的是Vultr的Vps,Vultr为了最大程度的防止Ddos的攻击自己关闭了很多端口,其中就包含了25端口。
然后博主就开始联系客服了,Vultr的客服相当不错,回复速度很快~
现在博主的Vps中的SMTP(port 25)就正常使用了~开森~现在开始正式分析这个问题的根源适用于大部分情况了~
错误分类
- php中mail函数异常
- php中mail函数无异常
- 主机smtp服务异常
php异常测试
WordPress发送邮件的原理很简单,它是通过PHP中的mail()函数来实现的,所以我们首先要解决的就是测试服务器对mail()函数的支持情况,小拼提供三种解决方案,随你喜欢。
1)新建一个PHP文件,命名为mail_test.php,加入以下代码:
<?php phpinfo(); ?>
将mail_test.php上传至网站根目录,访问该文件,就可以看到你的服务器PHP详细配置信息了,其中的sendmail_path组件,如果值是-t -i,则说明你的服务器支持mail()函数。
2)在上面的mail_test.php文件中,加入以下代码:
<?php $text = "This is a test!"; // 将邮箱地址改成你的 $mail = 'xpsem2010@gmail.com'; // 发送邮件 mail($mail, "Mail Test", $text); echo "Message has been sent !"; ?>
同上,访问mail_test.php文件,如果你的邮箱收到名为Mail Test的新邮件,那表示你的服务器是支持mail()函数发送邮件的。
3)在mail_test.php中加入如下代码:
<?php if (function_exists('mail')) echo "^_^ mail()函数可以使用!"; else echo "- -! mail()函数不可以使用!"; ?>
以上三种方法,就可以准确地测试出你的服务器对mail()函数的支持情况了。
主机smtp服务异常
没有安装或启动 sendmail 组件
解决办法
我是新手,命令不熟,所以写的很详细,老鸟勿喷哦
1.重新安装 sendmail 组件,我用的是 CentOS ,使用下面的命令安装
1 |
yum install sendmail |
2.使用下面的命令重启php-fpm进程
1 |
/etc/init.d/php-fpm restart |
3.检测sendmail是否运行正常
1 |
/etc/init.d/sendmail status |
如果显示正在运行running 就可以。
可能用到的命令
1 2 3 4 5 |
/etc/init.d/sendmail start (启动sendmail) /etc/init.d/sendmail stop (关闭sendmail) /etc/init.d/sendmail restart (重启sendmail) |
4.配置php.ini,填写sendmail的绝对路径
使用命令打开编辑php.ini
1 |
vi /usr/local/php/etc/php.ini |
输入?sendmail_path 查找定位(或者手动跳转找到sendmail_path),你会发现默认是下面的代码
1 |
;sendmail_path = |
按 i 进入编辑,将这行修改为
1 |
sendmail_path = /usr/sbin/sendmail -t -i |
按 Esc 键退出编辑,输入 :wq 保存退出
5.重启php-fpm进程
1 |
/etc/init.d/php-fpm restart |
主题SMTP账号配置
因为博主的域名是万网购买的,当时万网在做活动因此可以免费注册阿里云企业版邮箱且万网的域名自动解析了阿里云邮箱,因此在博主的主题之中就选择了阿里的邮箱来作为发送的邮箱,接收的邮箱使用的是126邮箱。