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已经将数据包封装好了,不需要再多做些什么,将实例序列化之后发送给腾讯云服务器,然后反序列化,添加发送账号密码即可。
上方代码虽然可以正常使用,但是缺乏安全性,如果需要使用可以做一下加密处理。这里不细说
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END