Typecho使用邮箱与Webhook配合推送评论通知

目前本站的评论通知使用的是泽泽社长的CommentNotifier插件实现的,为了隐藏IP选择的是阿里云邮件推送。总所周知,阿里云邮件推送是收费的,秉持能省一点是一点的原则,我们可以将发给站长的邮件全部通过WebHook推送,这样可以省大多数的邮件推送量。

以CommentNotifier插件为例,以下是简单代码:

在插件接口函数下新增Webhook异步推送接口:

Service::pluginHandle()->sendwebhook = __CLASS__ . '::sendwebhook';//异步接口

在插件配置函数下新增Webhook地址输入框:

// Webhook推送
$webhook = new Form\Element\Text('webhook', NULL, NULL, _t('Webhook推送地址'), _t('请填写Webhook推送地址'));
$form->addInput($webhook);

refinishComment函数下新增Webhook推送步骤:

$webhook = $plugin->webhook;
//Webhook推送
        if (!empty($webhook)){
            if($plugin->yibu==1){
                Helper::requestService('sendwebhook', $comment->coid);
            }else{
                self::sendwebhook($comment->coid);
            }
        }

新增sendwebhook函数:

public static function sendwebhook(int $commentId){
    // 获取系统配置选项
    $options = Options::alloc();
    $plugin = $options->plugin('CommentNotifier');
    // 消除下方注释后这里会睡眠10秒,可测试异步提交是否真正提速了
    //sleep(10);
    $webhook = $plugin->webhook;
    $comment = Helper::widgetById('comments', $commentId);
    $post = Helper::widgetById('contents', $comment->cid);
    $posttitle = $post->title;
    $commentauthor = $comment->author;
    $commenttext = $comment->text;
    $commentcreated = date('Y-m-d H:i:s', $comment->created);
    $message = '**评论通知**\n>主题:' . $posttitle . '\n>时间:' . $commentcreated . '\n><font color=\"red\">' . $commentauthor . '</font>说:<font color=\"red\">' . $commenttext . '</font>';
    $postdata = '{"msgtype":"markdown","markdown":{"content":"' . $message . '"}';
    $opts = [
        'http' => [
        'method'  => 'POST',
        'header'  => 'Content-type: application/json',
        'content' => $postdata
        ],
        ];
    $context  = stream_context_create($opts);
    $result = file_get_contents($webhook, false, $context);
}

保存后启用插件,输入邮箱配置+Webhook地址大功告成了!

屏幕截图 2024-11-23 162338.png

下面是推送效果:

Screenshot_20241123_193649.jpg

读万卷BookyTypecho
  1. 看着挺不错哦


  2. 我是用最早的CommentToMail,目前正常;不过好像很多虚拟主机用不了


  3. 这个主题不错哎


发表