解决pr主机搭建wordpress无法发邮件问题
pr无法发邮件,跟pr发工单liangzai说就是没法发,连发几个语气有点不耐烦,不敢继续问下去,索性自己解决。
用的stmp,本地用php composer拉phpmail,配合QQ mail,发送成功。具体QQ怎么开stmp请自行百度。
放到pr服务器上就一直失败,但是突然想起我有一台腾讯云主机,尝试了下,使用腾讯云主机发送邮件,依旧成功,所以考虑能不能使用pr主机发送邮件之后,将邮件信息转发到腾讯云主机,再发送出去,查了下wordpress内部使用的也是phpmail,这就好办了。
实现原理:提交->pr主机->腾讯云
在wp-include/pluggable.php文件543行,找到
return $phpmailer->send();
改成如下
$phpmailer = serialize($phpmailer); $jsonmail['jsonmail'] = $phpmailer; $url = 'http://[你的网址]/mail.php'; $postData = http_build_query($jsonmail); $options = array( 'http' => array( 'method' => 'POST', 'header' => 'Content-type:application/x-www-form-urlencoded', 'content' => $postData, 'timeout' => 15 * 60 // 超时时间(单位:s) ) ); $context = stream_context_create($options); $result = file_get_contents($url, false, $context); if($result == 200) { return true; } else { return result; }
接下来是部署在腾讯云代码,部署一份代码,叫mail.php,代码如下
<?php use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require './src/Exception.php'; require './src/PHPMailer.php'; require './src/SMTP.php'; $mail = unserialize($_POST@['jsonmail']); try { //服务器配置 $mail->CharSet ="UTF-8"; //设定邮件编码 $mail->SMTPDebug = 0; // 调试模式输出 $mail->isSMTP(); // 使用SMTP $mail->Host = 'smtp.qq.com'; // SMTP服务器 $mail->SMTPAuth = true; // 允许 SMTP 认证 $mail->Username = '12345678@qq.com'; // SMTP 用户名 即邮箱的用户名 $mail->Password = '123456678'; // SMTP 密码 部分邮箱是授权码(例如163邮箱) $mail->SMTPSecure = 'ssl'; // 允许 TLS 或者ssl协议 $mail->Port = 465; // 服务器端口 25 或者465 具体要看邮箱服务器支持 //$mail->setFrom('12345678@qq.com', '发件人'); //发件人 $mail->isHTML(true); // 是否以HTML文档格式发送 发送后客户端可直接显示对应HTML内容 $re = $mail->send(); if($re == true) { echo 200;die; } return $mail->send(); die; } catch (Exception $e) { echo '邮件发送失败: ', $mail->ErrorInfo; }
原理很简单,其实wordpress已经将数据包封装好了,不需要再多做些什么,将实例序列化之后发送给腾讯云服务器,然后反序列化,添加发送账号密码即可。
上方代码虽然可以正常使用,但是缺乏安全性,如果需要使用可以做一下加密处理。这里不细说