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 邮箱。