# LcReplyMailer **Repository Path**: lczld/LcReplyMailer ## Basic Information - **Project Name**: LcReplyMailer - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: https://www.lcbk.cn/ - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-15 - **Last Updated**: 2026-10-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # LcReplyMailer —— Typecho 评论回复邮件通知插件 > Typecho 评论回复邮件通知插件,专为「就是老陈」的 [LcMailer](https://gitee.com/lczld/LcMailer) 适配而生。新评论 / 回复 / @提及 时自动邮件提醒,支持通知文章作者、被回复者、@提及对象与站点管理员。 **作者**:就是老陈 **主页**:https://www.lcbk.cn/ **适用**:Typecho 1.2.0+ / 1.3.0 **依赖**:[LcMailer](https://gitee.com/lczld/LcMailer) **协议**:MIT --- ## 一、功能特性 | 功能 | 说明 | | --- | --- | | 启用 / 关闭 | 一键开关整个邮件通知功能 | | 通知文章作者 | 有新评论时,是否通知文章作者 | | 通知被回复者 | 有人回复评论时,是否通知被回复的评论者 | | 通知 @提及对象 | 评论中出现「@用户名」时,自动通知该注册用户 | | 通知站点管理员 | 有新评论时,是否额外通知站点管理员(邮箱可自定义) | | 自定义发件人名称 | 通知邮件的发件人显示名可自定义,留空沿用 LcMailer 配置 | | 后台发送测试邮件 | 设置页填一个邮箱并保存,即发一封测试信验证 SMTP | | 邮件正文模板可配置 | 新评论 / 回复 / @提及 三套正文均可后台自定义,留空用内置模板 | | 收件人去重 | 同一邮箱只发一封(如作者同时是管理员不会重复收) | | 不通知自己 | 评论者不会收到自己评论/自己回复的通知 | | 异步发送 | 基于 Typecho 异步回调,不阻塞访客评论提交 | | 待审核可选项 | 默认只通知「已通过」评论;可开启「待审核也通知」(垃圾评论永不通知) | | 发送日志 | `LcReplyMailer/log/send.log` 记录失败原因,便于排错 | | 适配 LcMailer | 真正发信由 LcMailer 的 `SendMail` 完成,无需重复配置 SMTP | --- ## 二、环境要求 - PHP 7.4 或 8.x(已在 PHP 8.3 校验) - Typecho 1.2.0 及以上(含 1.3.0) - **已安装并启用 LcMailer 插件**,且已在「邮件 → 邮件中心」填好 SMTP 并完成连接测试 > 本插件自身不实现 SMTP,所有发信都委托给 LcMailer。若未启用 LcMailer,插件会给出明确提示且不会发信。 --- ## 三、安装 1. **下载**:打开仓库首页,点右上角「克隆/下载」→「下载 ZIP」,得到 `LcReplyMailer-main.zip`。 2. **解压**:解压后得到一个名为 `LcReplyMailer-main` 的文件夹。 3. **改名(关键步骤,别跳过)**:把文件夹 `LcReplyMailer-main` 重命名为 `LcReplyMailer`。 4. 将 `LcReplyMailer` 目录上传至 Typecho 的 `usr/plugins/` 下。 5. 进入 Typecho 后台「控制台 → 插件」,找到 **LcReplyMailer**,点击「启用」。 6. 确保 **LcMailer** 已启用且 SMTP 配置正确(建议先在 LcMailer 里发一封测试邮件验证)。 7. 点击插件下的「设置」,按需勾选通知对象并保存。 > ⚠️ 第 3 步的改名不能省:Typecho 通过插件目录名识别插件,目录必须是 `LcReplyMailer`,否则后台找不到或启用报错。 --- ## 四、配置说明 | 配置项 | 可选值 | 默认 | 说明 | | --- | --- | --- | --- | | 启用邮件通知 | 开启 / 关闭 | 开启 | 总开关 | | 通知文章作者 | 通知 / 不通知 | 通知 | 有新评论时通知作者 | | 通知被回复者 | 通知 / 不通知 | 通知 | 有人回复评论时通知对方 | | 通知 @提及对象 | 通知 / 不通知 | 通知 | 评论中出现「@用户名」时通知该注册用户 | | 通知站点管理员 | 通知 / 不通知 | 不通知 | 有新评论时额外通知管理员 | | 站点管理员邮箱 | 文本 | 空 | 留空则自动取第一个管理员账号邮箱 | | 自定义发件人名称 | 文本 | 空 | 通知邮件的发件人显示名,留空沿用 LcMailer 配置 | | 异步发送 | 开启 / 关闭 | 开启 | 关闭则改为同步发送(可能影响评论提交速度) | | 待审核评论也通知 | 通知 / 不通知 | 不通知 | 开启后待审核评论也发通知;垃圾评论永远不发 | | 新评论邮件主题模板 | 文本(支持变量) | `{siteTitle} · 新评论:{postTitle}` | 新评论通知的邮件标题,留空用默认 | | 回复邮件主题模板 | 文本(支持变量) | `{siteTitle} · {commentAuthor} 回复了你的评论(《{postTitle}》)` | 回复通知的邮件标题,留空用默认 | | 新评论邮件正文模板 | 多行文本(支持变量) | 空 | 留空用内置精美模板 | | 回复邮件正文模板 | 多行文本(支持变量) | 空 | 留空用内置精美模板,另含 `{{parent*}}` 变量 | | @提及邮件正文模板 | 多行文本(支持变量) | 空 | 留空用内置精美模板 | | 发送测试邮件 | 文本 | 空 | 填写邮箱后「保存配置」即发一封测试信 | ### 主题模板变量 | 变量 | 含义 | | --- | --- | | `{siteTitle}` | 站点名称 | | `{postTitle}` | 文章标题 | | `{commentAuthor}` | 本次评论者昵称 | | `{parentAuthor}` | 被回复者昵称(仅回复通知可用) | 示例:想把新评论主题改成「博客名|文章名 收到新评论」,填 `{siteTitle}|{postTitle} 收到新评论` 即可。 ### 正文模板变量 正文模板填写的是**完整 HTML**,用 `{{变量}}` 占位(所有动态内容均已转义,可安全输出)。**留空则使用内置精美模板**。 | 变量 | 含义 | | --- | --- | | `{{siteTitle}}` | 站点名称 | | `{{siteUrl}}` | 站点地址 | | `{{postTitle}}` | 文章标题 | | `{{commentAuthor}}` | 本次评论者昵称(@提及通知中即「提及者」) | | `{{commentContent}}` | 评论内容(换行已转 `
`) | | `{{commentMail}}` | 评论者邮箱 | | `{{avatarUrl}}` | 评论者头像地址 | | `{{permalink}}` | 该评论的直达链接 | | `{{date}}` | 评论时间 | | `{{ip}}` | 评论者 IP | | `{{parentAuthor}}` | 被回复者昵称(回复通知可用) | | `{{parentContent}}` | 被回复的原评论内容(回复通知可用) | | `{{parentAvatar}}` | 被回复者头像(回复通知可用) | | `{{toName}}` | 本封邮件收件人的昵称 | 最小可用示例(新评论正文): ```html

{{commentAuthor}} 在《{{postTitle}}》评论:
{{commentContent}}

查看评论

``` --- ## 五、与 LcMailer 的适配(原理) 本插件只负责「谁该收到邮件、邮件写什么」,真正的发信调用 LcMailer 提供的全局类: ```php $mail = new \SendMail(); // $to: 收件人邮箱; $subject: 标题; $body: HTML 正文; $options: 附加选项; 返回 bool $mail->send($to, $subject, $body, $options); ``` - `SendMail` 由 LcMailer 在 `index.php` / `admin/common.php` 的 `begin` 钩子里自动加载,前后台与异步回调请求中均可用。 - 发件人、SMTP 等全部沿用 LcMailer 的后台配置,本插件**无需任何额外邮件配置**。 - 「自定义发件人名称」通过 `$options['fromName']` 传入,LcMailer 支持该选项;留空则不传,沿用 LcMailer 默认发件人。 - 若 LcMailer 未加载,插件会自动尝试 `require` 其 `lib/SendMail.php`;仍失败时记录日志并跳过发送。 --- ## 六、通知逻辑一览 - **新的顶级评论**(无父评论):通知【文章作者】(若开启)+【站点管理员】(若开启)+【@提及对象】(若开启且评论中 @ 了注册用户)。 - **回复评论**(有父评论):通知【被回复者】(若开启)+【文章作者】(若开启)+【站点管理员】(若开启)+【@提及对象】(若开启)。 - 同一邮箱在多个角色中重复出现时,只发送一封,且按「作者 > 被回复者 > 管理员 > @提及」优先级选择邮件内容。 - 评论者本人永远不会收到自己产生的通知(@提及也不会通知评论者自己)。 --- ## 七、常见问题 **Q1:启用了但收不到邮件?** - 先确认 LcMailer 已启用且 SMTP 测试通过。 - 若开启「异步发送」后收不到,可能是服务器 / 防火墙 / CDN 拦截了 Typecho 的异步回调请求。请在插件设置里关闭「异步发送」改为同步,或把本站 IP 加入白名单。 - 查看 `LcReplyMailer/log/send.log` 中的失败原因。 **Q2:为什么有时只收到一封而不是多封?** - 这是收件人去重设计:同一邮箱只发一封,避免作者兼管理员时重复打扰。 **Q3:待审核的评论会通知吗?** - 默认不会;如需通知,请在设置中开启「待审核评论也通知」。垃圾评论(spam)永远不通知。 **Q4:后台管理员回复评论,访客会收到通知吗?** - 当前版本仅覆盖**前台访客提交评论**场景(通过 `Widget\Feedback` 的 `finishComment` 钩子)。后台回复暂未纳入,后续版本可扩展。 **Q5:@提及是怎么匹配的?** - 用正则提取评论中的 `@xxx`(支持中文、字母、数字、下划线),再拿 `xxx` 去用户表比对**昵称(screenName)或登录名(name)**,不区分大小写。 - 只有**命中的注册用户**才会收到通知,未命中的 `@xxx` 不会误发;邮箱地址(如 `a@b.com`)不会被识别为提及。 - 想被 @ 到,需保证评论里的名字与后台「用户 → 昵称/登录名」完全一致。 --- ## 八、许可证 本插件基于 [MIT License](https://opensource.org/licenses/MIT) 开源。 ``` MIT License Copyright (c) 2026 就是老陈 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ``` > 注:本插件依赖的 LcMailer 为独立项目,其许可证以 LcMailer 自身仓库声明为准;本仓库仅覆盖 LcReplyMailer 自身代码。