<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>博客折腾 on 昭鸢笺</title>
        <link>https://blog.mibase.top/tags/%E5%8D%9A%E5%AE%A2%E6%8A%98%E8%85%BE/</link>
        <description>Recent content in 博客折腾 on 昭鸢笺</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh</language>
        <lastBuildDate>Sun, 01 Nov 2026 12:00:00 +0800</lastBuildDate><atom:link href="https://blog.mibase.top/tags/%E5%8D%9A%E5%AE%A2%E6%8A%98%E8%85%BE/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>谁还在用 GitHub 登录发评论？我把博客评论区搬到 Netlify 后的全套折腾与避坑指南</title>
            <link>https://blog.mibase.top/p/migrate-giscus-to-twikoo-netlify/</link>
            <pubDate>Sun, 01 Nov 2026 12:00:00 +0800</pubDate>
            <guid>https://blog.mibase.top/p/migrate-giscus-to-twikoo-netlify/</guid>
            <description>&lt;img src=&#34;https://blog.mibase.top/p/migrate-giscus-to-twikoo-netlify/cover.webp&#34; alt=&#34;Featured image of post 谁还在用 GitHub 登录发评论？我把博客评论区搬到 Netlify 后的全套折腾与避坑指南&#34; /&gt;&lt;p&gt;前阵子有朋友私信我：“在你博客想留个言，结果跳出来要授权 GitHub 账号，试了两次网络超时就放弃了。”&lt;/p&gt;&#xA;&lt;p&gt;听到这话我才猛然醒悟。以前我觉得 Giscus / Utterances 这种基于 GitHub Issues 或 Discussions 的评论方案简直是神器——数据不用自己准备数据库，防垃圾评论完全依靠 GitHub 的账号体系，维护成本低到了极点。&lt;/p&gt;&#xA;&lt;p&gt;但站在普通访客的角度来看，这种体验其实极其糟糕：&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;高昂的访问门槛&lt;/strong&gt;：非程序员群体或者没有 GitHub 账号的读者，看完文章哪怕有一两句话想交流，看到OAuth登录弹窗的那一刻就会直接选择关闭页面。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;极其不稳定的网络连接&lt;/strong&gt;：国内直连访问 GitHub API 常常遇到掉包、连接重置或高延迟，评论框经常出现无限加载的转圈状态。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;缺乏主动通知闭环&lt;/strong&gt;：当有其他人在评论区回复了该访客，除非访客主动重新打开这篇文章页面，否则完全无法获得邮件提醒。&lt;/p&gt;&#xA;&lt;p&gt;个人博客本来就是为了建立交流与连接。如果设置了一道道门槛把读者关在门外，那这片方寸之地未免显得过于冷清。于是我决定彻底抛弃原有的方案，重构评论系统，将评论后端迁移至 &lt;strong&gt;Twikoo&lt;/strong&gt; 并托管于 &lt;strong&gt;Netlify&lt;/strong&gt; 服务。&lt;/p&gt;&#xA;&lt;p&gt;本文将完整记录从架构选型、数据库接入、Netlify 部署、SMTP 发信避坑到 Cloudflare 人机防护的完整流程。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;架构对比与技术选型&#34;&gt;架构对比与技术选型&#xA;&lt;/h2&gt;&lt;p&gt;在正式动手之前，我针对目前主流的自建评论系统与托管平台进行了一番权衡：&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;方案&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;部署平台&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;数据存储&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;优点&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;缺点&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;strong&gt;Giscus&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;GitHub Pages&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;GitHub Discussions&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;免维护、零成本&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;须授权登录 GitHub，国内访问不稳，无邮件提醒&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;strong&gt;Valine / Waline&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;LeanCloud / Vercel&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;LeanCloud / MongoDB&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;功能丰富，支持多后端&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;LeanCloud 国际版绑定困难，国内版需备案域名&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;strong&gt;Twikoo (Vercel)&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Vercel&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;MongoDB / CloudBase&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;快速部署，部署成本低&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;*.vercel.app&lt;/code&gt; 被部分地区屏蔽，发信长连接易超时&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;strong&gt;Twikoo (Netlify)&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Netlify&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;MongoDB Atlas&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;免费额度充足，国内直连稳，Serverless 函数优秀&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;需配置跨域与环境变量&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;综合评估后，&lt;strong&gt;Twikoo + Netlify + MongoDB Atlas&lt;/strong&gt; 成为了目前兼顾稳定性、自由度与免费额度的最佳方案。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;搭建-backend-基础设施&#34;&gt;搭建 Backend 基础设施&#xA;&lt;/h2&gt;&lt;h3 id=&#34;准备-mongodb-atlas-数据库&#34;&gt;准备 MongoDB Atlas 数据库&#xA;&lt;/h3&gt;&lt;p&gt;首先需要一个持久化存储评论数据的数据库。MongoDB Atlas 提供了永久免费的 500MB M0 沙箱集群，对于个人博客的评论数据量来说绰绰有余。&lt;/p&gt;&#xA;&lt;p&gt;注册并登录 &lt;a class=&#34;link&#34; href=&#34;https://www.mongodb.com/cloud/atlas&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;MongoDB Atlas&lt;/a&gt;。&lt;/p&gt;&#xA;&lt;p&gt;创建一个免费集群（Shared Cluster），节点地区推荐选择 &lt;strong&gt;Asia (Singapore 或 Tokyo)&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;在 &lt;strong&gt;Database Access&lt;/strong&gt; 页面新建一个数据库用户，设置好账号密码（密码请避免包含特殊符号，或进行 URL 编码）。&lt;/p&gt;&#xA;&lt;p&gt;在 &lt;strong&gt;Network Access&lt;/strong&gt; 页面添加 IP 白名单，直接设置为 &lt;code&gt;0.0.0.0/0&lt;/code&gt;（允许所有 IP 访问，因为 Netlify Serverless 函数的出口 IP 是动态变化的）。&lt;/p&gt;&#xA;&lt;p&gt;点击 &lt;strong&gt;Connect&lt;/strong&gt; 按钮，选择 &lt;em&gt;Connect your application&lt;/em&gt;，获取形如以下的连接字符串（&lt;code&gt;MONGODB_URI&lt;/code&gt;）：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mongodb+sandbox://&amp;lt;username&amp;gt;:&amp;lt;password&amp;gt;@cluster0.xxx.mongodb.net/twikoo?retryWrites=true&amp;amp;w=majority&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;h3 id=&#34;fork-并部署到-netlify&#34;&gt;Fork 并部署到 Netlify&#xA;&lt;/h3&gt;&lt;p&gt;打开 GitHub，Fork &lt;a class=&#34;link&#34; href=&#34;https://github.com/twikoojs/twikoo&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Twikoo 官方 Netlify 部署模版&lt;/a&gt;。&lt;/p&gt;&#xA;&lt;p&gt;登录 &lt;a class=&#34;link&#34; href=&#34;https://app.netlify.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Netlify 控制台&lt;/a&gt;，选择 &lt;strong&gt;Add new site&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Import an existing project&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;选择刚才 Fork 的 Git 仓库，构建设置保持默认（Build command 留空，Publish directory 填写 &lt;code&gt;public&lt;/code&gt; 或保持默认）。&lt;/p&gt;&#xA;&lt;p&gt;进入 &lt;strong&gt;Site configuration&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Environment variables&lt;/strong&gt;，添加环境变量：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;MONGODB_URI&lt;/code&gt;&lt;/strong&gt;：填写上一小节保存的 MongoDB 连接字符串。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;部署完成后，Netlify 会分配一个默认的二级域名（如 &lt;code&gt;random-name.netlify.app&lt;/code&gt;）。在 &lt;strong&gt;Domain management&lt;/strong&gt; 中绑定你的自定义子域名（例如：&lt;code&gt;comments.mibase.top&lt;/code&gt;），并在 DNS 服务商处将 CNAME 指向 Netlify。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;安全与跨域限制cors&#34;&gt;安全与跨域限制（CORS）&#xA;&lt;/h2&gt;&lt;p&gt;如果不对评论后端进行跨域限制，任何人都可以拿你的 API 接口配置到他们自己的网站上，甚至恶意消耗你的数据库额度。&lt;/p&gt;&#xA;&lt;p&gt;进入 Netlify 的 Environment variables 页面，添加跨域白名单配置：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;CORS_ALLOW_ORIGIN&lt;/code&gt;&lt;/strong&gt;：&lt;code&gt;https://blog.mibase.top,https://mibase.top,https://200596.xyz&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：如果有多个前端访问域名（例如主站、备用域名及本地测试环境），请使用英文逗号 &lt;code&gt;,&lt;/code&gt; 分隔，严禁包含多余空格。&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;smtp-邮件发信与-587-端口踩坑实录&#34;&gt;SMTP 邮件发信与 587 端口踩坑实录&#xA;&lt;/h2&gt;&lt;p&gt;这是整个折腾过程中最耗时、也最容易遇到隐蔽 Bug 的步骤。&lt;/p&gt;&#xA;&lt;h3 id=&#34;踩坑分析为什么-465-端口会连接超时&#34;&gt;踩坑分析：为什么 465 端口会连接超时？&#xA;&lt;/h3&gt;&lt;p&gt;最初我在配置 Resend 服务（发件箱 &lt;code&gt;hi@mibase.top&lt;/code&gt;）时，习惯性地选择了 &lt;code&gt;465&lt;/code&gt; 端口（SMTPS 协议）。&lt;/p&gt;&#xA;&lt;p&gt;在本地测试环境中发信正常，但在 Netlify / Vercel 这类 Serverless 无服务器函数运行环境中，每次访客提交评论，前端就会无限转圈，随后控制台抛出 &lt;code&gt;Connection Timeout&lt;/code&gt; 错误。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;根本原因&lt;/strong&gt;：Serverless 函数在执行完主逻辑后会迅速关停上下文，而 465 端口需要建立同步的 SSL/TLS 握手长连接，在云函数的极短生命周期内非常容易触发死锁或超时挂起。&lt;/p&gt;&#xA;&lt;h3 id=&#34;正确配置切换至-587-端口starttls&#34;&gt;正确配置：切换至 587 端口（STARTTLS）&#xA;&lt;/h3&gt;&lt;p&gt;解决该问题的核心在于切换为 &lt;strong&gt;&lt;code&gt;587&lt;/code&gt; 端口&lt;/strong&gt;（基于明文先建立连接，再通过 STARTTLS 指令升级为加密传输）。&lt;/p&gt;&#xA;&lt;p&gt;请直接在 Twikoo 管理后台的&lt;strong&gt;邮件通知&lt;/strong&gt;卡片中按如下格式填写：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;SMTP_HOST&lt;/code&gt;&lt;/strong&gt;：&lt;code&gt;smtp.resend.com&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;SMTP_PORT&lt;/code&gt;&lt;/strong&gt;：&lt;code&gt;587&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;SMTP_USER&lt;/code&gt;&lt;/strong&gt;：&lt;code&gt;resend&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;SMTP_PASS&lt;/code&gt;&lt;/strong&gt;：&lt;code&gt;re_xxxxxxxxxxxx&lt;/code&gt; &lt;em&gt;(替换为你的 Resend API Key)&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;SMTP_SECURE&lt;/code&gt;&lt;/strong&gt;：&lt;code&gt;false&lt;/code&gt; &lt;em&gt;(必须填 false，587 端口会自动完成 TLS 提升)&lt;/em&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;配置完成后，点击后台测试发信，日志瞬间返回 &lt;code&gt;250 OK&lt;/code&gt;，发信延迟降低至 1 秒以内。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;契合-stack-主题的高亮蓝307af6html-邮件模板&#34;&gt;契合 Stack 主题的高亮蓝（&lt;code&gt;#307af6&lt;/code&gt;）HTML 邮件模板&#xA;&lt;/h2&gt;&lt;p&gt;为了让收到的通知邮件与“昭鸢笺”博客的主体视觉保持一致，我废弃了易因变量缺失而导致排版错乱的模版，改写了一套纯净版 HTML 信笺代码。&lt;/p&gt;&#xA;&lt;h3 id=&#34;访客收到回复时的通知模板&#34;&gt;访客收到回复时的通知模板&#xA;&lt;/h3&gt;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;code&gt;MAIL_SUBJECT&lt;/code&gt;&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;你在【昭鸢笺】的纸笺上收到了新回复 ✉️&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;code&gt;MAIL_TEMPLATE&lt;/code&gt;&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;font-family: -apple-system, BlinkMacSystemFont, &amp;#39;Segoe UI&amp;#39;, Roboto, &amp;#39;Helvetica Neue&amp;#39;, Arial, sans-serif; max-width: 600px; margin: 0 auto; padding: 32px; background: #ffffff; border: 1px solid #f3e8ff; border-radius: 12px; color: #2d2d2d;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;text-align: center; margin-bottom: 24px; padding-bottom: 16px; border-bottom: 1px dashed #f0d5ff;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;span&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;font-size: 13px; letter-spacing: 2px; color: #b862ff; text-transform: uppercase; font-weight: 600;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;blog.mibase.top · 昭鸢笺&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;span&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;h2&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;font-size: 19px; font-weight: 600; color: #1f1f1f; margin: 8px 0 0 0;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;你的字句，有了新的回音&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;h2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;font-size: 14px; color: #555555; margin-bottom: 8px;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;strong&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;${PARENT_NICK}&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;strong&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt; 曾留白道：&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;blockquote&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;background: #faf5ff; padding: 14px 18px; border-left: 3px solid #d8b4fe; margin: 0 0 18px 0; font-size: 14px; color: #6b7280; border-radius: 0 6px 6px 0;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;${PARENT_COMMENT}&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;blockquote&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;font-size: 14px; color: #555555; margin-bottom: 8px;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;而 &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;strong&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;${NICK}&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;strong&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt; 续写道：&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;blockquote&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;background: #fcf4ff; padding: 14px 18px; border-left: 3px solid #c084fc; margin: 0 0 24px 0; font-size: 14px; color: #1f1f1f; border-radius: 0 6px 6px 0;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;${COMMENT}&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;blockquote&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;text-align: center; margin-top: 28px;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;${POST_URL}&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;display: inline-block; background: #c084fc; color: #ffffff; padding: 11px 28px; font-size: 14px; text-decoration: none; border-radius: 6px; font-weight: 600; letter-spacing: 0.5px; box-shadow: 0 3px 10px rgba(192, 132, 252, 0.35);&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;展开阅览完整对话&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;font-size: 12px; color: #9ca3af; text-align: center; margin-top: 36px; padding-top: 16px; border-top: 1px solid #f5f3ff;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;此封信件由 &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;https://blog.mibase.top&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;color: #b862ff; text-decoration: none;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;昭鸢笺&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt; 自动轻传，愿文字常伴。&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;博主收到新评论时的通知模板&#34;&gt;博主收到新评论时的通知模板&#xA;&lt;/h3&gt;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;code&gt;MAIL_SUBJECT_ADMIN&lt;/code&gt;&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;✨ 昭鸢笺落下一枚新笺：来自新访客的足迹&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;code&gt;MAIL_TEMPLATE_ADMIN&lt;/code&gt;&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;font-family: -apple-system, BlinkMacSystemFont, &amp;#39;Segoe UI&amp;#39;, Roboto, &amp;#39;Helvetica Neue&amp;#39;, Arial, sans-serif; max-width: 600px; margin: 0 auto; padding: 32px; background: #ffffff; border: 1px solid #f3e8ff; border-radius: 12px; color: #2d2d2d;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;text-align: center; margin-bottom: 24px; padding-bottom: 16px; border-bottom: 1px dashed #f0d5ff;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;span&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;font-size: 13px; letter-spacing: 2px; color: #b862ff; text-transform: uppercase; font-weight: 600;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;blog.mibase.top · 昭鸢笺&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;span&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;h2&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;font-size: 19px; font-weight: 600; color: #1f1f1f; margin: 8px 0 0 0;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;有访客在云笺上留下了痕迹&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;h2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;background: #faf5ff; padding: 16px 20px; border-radius: 8px; margin-bottom: 20px; font-size: 13px; color: #4b5563; border: 1px solid #f3e8ff;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;margin: 0 0 8px 0;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;strong&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;来信者：&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;strong&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;${NICK}&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;margin: 0 0 8px 0;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;strong&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;电子邮箱：&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;strong&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;${MAIL}&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;margin: 0;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;strong&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;归处（IP 属地）：&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;strong&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;${IP}&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;font-size: 14px; color: #555555; margin-bottom: 8px;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;strong&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;留白内容：&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;strong&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;blockquote&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;background: #fcf4ff; padding: 14px 18px; border-left: 3px solid #c084fc; margin: 0 0 24px 0; font-size: 14px; color: #1f1f1f; border-radius: 0 6px 6px 0;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;${COMMENT}&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;blockquote&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;text-align: center; margin-top: 28px;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;${POST_URL}&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;display: inline-block; background: #1f1f1f; color: #ffffff; padding: 11px 28px; font-size: 14px; text-decoration: none; border-radius: 6px; font-weight: 500; letter-spacing: 0.5px;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;赴约回复&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;font-size: 12px; color: #9ca3af; text-align: center; margin-top: 36px; padding-top: 16px; border-top: 1px solid #f5f3ff;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;来自 昭鸢笺 (blog.mibase.top) 后台自动化提醒&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;无感反垃圾cloudflare-turnstile-验证&#34;&gt;无感反垃圾（Cloudflare Turnstile 验证）&#xA;&lt;/h2&gt;&lt;p&gt;降低评论门槛后，最大的隐患是自动化垃圾评论脚本（Spam Bot）。传统九宫格验证码与扭曲文字校验极大伤害用户体验，因此我引入了 &lt;strong&gt;Cloudflare Turnstile&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;h3 id=&#34;配置-turnstile&#34;&gt;配置 Turnstile&#xA;&lt;/h3&gt;&lt;ol&gt;&#xA;&lt;li&gt;登录 &lt;a class=&#34;link&#34; href=&#34;https://dash.cloudflare.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Cloudflare Dashboard&lt;/a&gt;，进入左侧导航栏的 &lt;strong&gt;Turnstile&lt;/strong&gt; 选项卡。&lt;/li&gt;&#xA;&lt;li&gt;点击 &lt;strong&gt;Add site&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Site name&lt;/strong&gt;：&lt;code&gt;昭鸢笺&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Domain&lt;/strong&gt;：输入主域名 &lt;code&gt;mibase.top&lt;/code&gt;（自动覆盖子域名 &lt;code&gt;blog.mibase.top&lt;/code&gt; 和 &lt;code&gt;comments.mibase.top&lt;/code&gt;）。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Widget Mode&lt;/strong&gt;：选择 &lt;strong&gt;Managed&lt;/strong&gt;（托管模式）或 &lt;strong&gt;Non-interactive&lt;/strong&gt;（无感模式）。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;保存后获取 &lt;code&gt;Site Key&lt;/code&gt; 和 &lt;code&gt;Secret Key&lt;/code&gt;。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;注入-twikoo-参数&#34;&gt;注入 Twikoo 参数&#xA;&lt;/h3&gt;&lt;p&gt;将密钥配置到 Netlify 环境变量或 Twikoo 管理后台中：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;TURNSTILE_SITE_KEY&lt;/code&gt;&lt;/strong&gt;：&lt;code&gt;0x4AAAAAA...&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;TURNSTILE_SECRET_KEY&lt;/code&gt;&lt;/strong&gt;：&lt;code&gt;0x4AAAAAA...&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;开启后，正常访客发评论时后端会静默完成人机校验，用户端无任何感知；而恶意攻击脚本则会被 100% 拦截在外。同时可将 &lt;strong&gt;&lt;code&gt;NOTIFY_SPAM&lt;/code&gt;&lt;/strong&gt; 设置为 &lt;code&gt;false&lt;/code&gt;，彻底避免垃圾评论触发 SMTP 发信，节省 API 额度。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;总结与效果感受&#34;&gt;总结与效果感受&#xA;&lt;/h2&gt;&lt;p&gt;完成迁移与配置后，整体系统的运行效果如下：&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;响应速度提升明显&lt;/strong&gt;：Netlify Serverless 函数与国内直连节点配合，评论区加载延迟从原先的 3 秒以上缩短至 500ms 左右。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;交流门槛彻底消除&lt;/strong&gt;：读者不再需要授权 GitHub 账号，只需填写昵称和邮箱即可畅所欲言。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;闭环体验完善&lt;/strong&gt;：依托于 Resend 587 端口和主题色模板，博主与访客之间能建立即时且美观的邮件沟通链条。&lt;/p&gt;&#xA;&lt;p&gt;对于独立博客而言，基础设施的折腾并非为了炫技，而是为了在赛博世界里搭建一座没有门槛、稳定舒适的方寸小屋。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;如果你也饱受 Giscus 加载卡顿或 Vercel 发信超时的困扰，不妨尝试这套 Netlify + Resend + Turnstile 的架构方案。欢迎在下方全新的评论区留言测试！&lt;/strong&gt;&lt;/p&gt;&#xA;</description>
        </item></channel>
</rss>
