前段时间,从老薛主机转到了阿里云独享虚拟主机,并通过了备案。使用老薛的时候因为博主自己设置的登录密码过于简单,结果导致被土耳其的黑客给攻击了。在转入阿里云后第一时间就修改了后台登录地址并且设置了后台登录失败发送邮件提醒。结果发现发送邮件总是失败,苦苦搜索了一阵后总算解决了,原来是一个小错误设置导致的,索性发出来让我等这样的小白看看错误原因。大神请忽略
WordPress程序使用的不是fsockopen函数发邮件,而是使用stream_socket_client函数发,如果PHP函数在虚拟主机中被禁用,则会导致发信失败。解决方法如下:
1.去阿里云主机管理平台开启主机函数如图
2.修改WordPress程序中wp-includes/class-smtp.php文件,找到以下内容部分
$this->smtp_conn = @stream_socket_client(
$host . ":" . $port,
$errno,
$errstr,
$timeout,
STREAM_CLIENT_CONNECT,
$socket_context
);
3.使用以下内容代替该部分
$this->smtp_conn = fsockopen($host, $port, $errno, $errstr);
修改好的放到这里,下次应该就不用改了,直接复制就行了。class-smtp.php
4.安装插件 Easy WP SMTP Settings
启用后设置个人信息,使用的QQ企业邮箱设置如图
博主按照这样的设置后,一直不能发送邮件,后来一查看错误代码是邮箱验证密码错误。博主填写的是邮箱登录密码,而这个是要填写SMTP客户端的授权密码。这是导致邮件发送失败的主要原因。
5.或者使用下面的代码,添加到functions.php一样可以。
- //使用smtp发送邮件(请根据自己使用的邮箱设置SMTP)
- add_action('phpmailer_init', 'mail_smtp');
- function mail_smtp( $phpmailer ) {
- $phpmailer->FromName = '星光博客'; //发件人名称
- $phpmailer->Host = 'smtp.163.com'; //修改为你使用的邮箱SMTP服务器
- $phpmailer->Port = 465; //SMTP端口
- $phpmailer->Username = '*********@163.com'; //邮箱账户
- $phpmailer->Password = '*********'; //SMTP授权密码
- $phpmailer->From = '*********@163.com'; //邮箱账户
- $phpmailer->SMTPAuth = true;
- $phpmailer->SMTPSecure = 'ssl'; //tls or ssl (port=25时->留空,465时->ssl)
- $phpmailer->IsSMTP();
- }