首页>>技术分享>>php杂谈>解决pr主机搭建wordpress无法发邮件问题

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

大路 php杂谈 2023-10-13 140

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


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


标签: