解决pr主机搭建wordpress无法发邮件问题

解决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已经将数据包封装好了,不需要再多做些什么,将实例序列化之后发送给腾讯云服务器,然后反序列化,添加发送账号密码即可。

上方代码虽然可以正常使用,但是缺乏安全性,如果需要使用可以做一下加密处理。这里不细说

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片