WordPress无插件式解决无法发送邮件的问题

WordPress无法发送邮件主要原因是wp_mail系统函数失效。安全起见,许多服务器默认不支持mail函数,就算支持了,发出的邮件也很容易被服务商丢入垃圾箱。

邮件传输服务器(SMTP)端口号25,一般都被已经各大厂商屏蔽。像阿里云,虽然能申请解禁,但门槛太高,对多数人并不可取。

如此,只能用其他端口了,WordPress相关插件有很多,如easy-wp-smtp、wp-mail-smtp等,功能丰富,但也非常冗余,具体按需使用吧。

不用插件最简单的方法是修改WordPress默认发送邮件的方式。

主题function.php加入钩子:

add_action('phpmailer_init', 'custion_smtp');

function custion_smtp( $handle ) {
	$handle->FromName = '发件人邮箱账户'; // 自定义
	$handle->Host = 'smtp.163.com'; // 邮箱SMTP服务器
	$handle->Port = 465; // SMTP端口,固定
	$handle->Username = 'szwzjx@163.com'; // 邮箱账户
	$handle->Password = '......'; // 邮箱生成授权码,不是邮箱登录密码
	$handle->From = 'xxxxxx@163.com'; // 收件邮箱账户
	$handle->SMTPAuth = true;
	$handle->SMTPSecure = 'ssl'; // 端口25时 留空,465时 ssl,不需要改
	$handle->IsSMTP();
}

代码中只需更改FromName、 Username、Password和From四个属性。

特别注意Password是授权码,十六个大写字母,而非登录密码,

163邮箱的SMTP服务入口:设置->POP3/SMTP/IMAP,需要手动开启,授权码只显示一次。

之前绕了很多弯,一直纠结服务器的问题,想办法解决mail函数问题,均是无用功。看了不少资料,顺手记录下。

# sendmail服务器配置
set from=xxx@163.com
set smtp=smtp.163.com
set smtp-auth-user=xxx@163.com
set smtp-auth-password=KSJLDDSLDJD
set smtp-auth=login

查看mail日志
# tail /var/log/maillog 

参考资料

CentOS 7 PHP不能使用邮件功能发送邮件(https://blog.hostonnet.com/centos-7-php-cant-sent-email-using-mail-function)

Centos7 配置 sendmail、postfix 端口号25、465(https://blog.csdn.net/ithomer/article/details/83744621)