TP-log微语添加邮件回复通知【测试版】

1周前 (05-02) 97℃ 0

前言

这里代码的smtp使用的是第三方邮件api~

代码内容参考:“关于Tp-log系统前台评论/回复邮件发错收件人的问题解决

第一步:

这里需要在数据库tp_reply 新建一个mail字段用来存储用户邮箱

第二步:

打开 application\frontend\logi\Comment.php 添加以下代码:

     //邮件通知  
     private  function send($url){

                $ch = curl_init();
                $params[CURLOPT_URL] = $url;
                $params[CURLOPT_HEADER] = FALSE; //是否返回响应头信息
                $params[CURLOPT_SSL_VERIFYPEER] = false;
                $params[CURLOPT_SSL_VERIFYHOST] = false;
                $params[CURLOPT_RETURNTRANSFER] = true; //是否将结果返回
                $params[CURLOPT_POST] = true;
                curl_setopt_array($ch, $params); //传入curl参数             
                curl_exec($ch); //执行
                curl_close($ch); //关闭连接 

    }

第三步:

原本的微云评论没有邮箱这个选项...

修改\theme\frontend\default\t\index.html文件,在21行添加以下代码:

<div class="layui-col-md4">
<input type="text" name="mail" id="mail" class="layui-input" placeholder="* 邮箱"  value='' required />
</div>

效果图:

第四步:

不知道为什么这段$content = '@' . addslashes($data['poster']) . ':' . $data['content'];判断好像不行,会重复执行,我只能改2段url了..小白不懂这些...

   $date['tid'] = $data['tid'];
        $date['date'] = time();
        $date['name'] = $data['name'];
        $date['mail'] = $data['mail'];      //这段是主要的,把用户邮箱存入数据库
        if ($data['poster'] != 0 || $data['poster'] != '') {            
        $content = '@' . addslashes($data['poster']) . ':' . $data['content'];
        $date['content'] = $content;
        $username= addslashes($data['poster']);
        $date['mail'] =  Core::loadModel("reply")->where(["name"=>$username])->value('mail');
        $url="https://api.qzone.work/api/send.mail?user=邮箱账号&pass=邮箱授权码&title=您在xxx博客,微语有新的评论&content=". $date['content']."&name=微语秘书&to=". $date['mail']."";       
        }else{
        $date['content'] = $data['content'];
        $url="https://api.qzone.work/api/send.mail?user=邮箱账号&pass=邮箱授权码&title=您在xxx博客,微语有新的评论&content=". $date['content']."&name=微语秘书&to=". $date['mail']."";       
        }
        $date['ip'] = Request::instance()->ip();

        $isPost = Core::loadModel("Reply")->where(array('ip' =>Request::instance()->ip(), 'date' => array('gt', time() - 1)))->value('id');
        if ($isPost){
            return [RESULT_ERROR,"您回复的太快了,回复间隔必须大于60秒!",null];
        $result=Core::loadModel("Reply")->addObject($date);

            if($result){
            if(!Cookie::has("reply_name")){
            Cookie::set("reply_name",$date['name'],3600*365);
            }
            $where = ['tid'=>$data['tid']]; 
            $count = Core::loadModel("Reply")->where($where)->count('tid');
            $date = ['replynum'=>$count];
            $result=Core::loadModel($this->name)->where(["id"=>$data['tid']])->update($date);

            $this->send($url);              
            return [RESULT_SUCCESS, '发表成功', url('/T')];
        } 

总结

这是我小白瞎折腾了,其实如果只要单纯的别人评论通知自己,就没必要这么折腾,我想我回复的时候也能发送到他们邮箱这样,这只是一个测试版本我尽力了。

效果图:

标签: none

非特殊说明,本博所有文章均为博主原创。

吐槽啦~



已有 2 条评论


  1. 王麻子 游客 7天前 #2
    代码这么溜,满满的 康菲顿斯 ,加油。
    叶开楗 管理员 7天前 #2-1
    @王麻子: 小白得我,瞎折腾