xvmail一款有点好用的邮箱插件【重置版】
xvmail-1.7.0.jar⬅️点击此处下载
服主使用教程文档:
https://xn--9krq6q.xn--vqqq8jxym.ink/archives/xvmailfu-zhu-shi-yong-jiao-cheng-wen-dang
玩家使用教程文档:
https://xn--9krq6q.xn--vqqq8jxym.ink/archives/xvmailwan-jia-shi-yong-jiao-cheng-wen-dang
【插件发布】xvmail 1.7.0 — 游戏邮件 + 真实邮箱 HTML 通知 + 附件与领取奖励
插件名称: xvmail
当前版本: 1.7.0
作者: xiaolv
运行环境: Java 21;Paper API 编译目标 1.21.4,plugin.yml 声明 folia-supported: true
依赖: 无必需前置。JAR 已内置 Gson 与 Jakarta Mail;Vault / PlayerPoints 仅在开启付费发送时需要
存储: YAML 文件,无需数据库
一、这是什么
一个给 Paper / Folia 服务器用的游戏内邮件系统。玩家之间可以互相写信、寄物品,管理员可以给在线 / 离线玩家群发通知、发带奖励的领取邮件;玩家绑定真实邮箱后,别人发给他的游戏邮件会同步一封完整的 HTML 邮件到他的真实邮箱,玩家互发时邮件里显示的是发件玩家名,而不是笼统的服务器名。
文件读写、SMTP 发送、AI 审核请求都在后台线程执行,不占用游戏主线程。
二、主要功能
游戏内邮件
- 玩家私信、自定义主题与正文;在线 / 离线均可投递,上线后补看
- 分页收件箱 GUI、已读状态、单封删除、二次确认清空、登录未读提醒
- GUI 写信流程(收件人 → 主题 → 正文,随时输入
cancel取消) - 可配置邮件模板,支持
{player}/{sender}占位符 - 主手整组物品作为附件,收件人在详情页点击领取一次;背包满则掉落脚边
- 每日免费发送次数,超出后可用 Vault / PlayerPoints 付费发送;失败自动退回次数与费用
真实邮箱
- SMTP 验证码绑定,验证成功后才写入
email_bindings.yml - 游戏邮件成功投递后自动同步到已验证绑定邮箱,默认开启,覆盖玩家互发、管理员 / 控制台投递、领取邮件与近期上线群发
- 同步邮件是完整 HTML 邮件:Player Mail / System Notice 两套可自定义模板,品牌栏、发件人、正文、附件说明、通知标签与页脚一应俱全,
Content-Type: text/html; charset=UTF-8 - 发件人区分来源:玩家互发显示
玩家名 (via 服务器名),正文标注「发件人:玩家名(游戏内玩家)」和「来自:服务器名」;管理员 / 系统邮件显示服务器名 - 玩家填写的主题、正文、玩家名、服务器名都做 HTML 转义,防止邮件里被注入标签
- 验证码邮件同样是 HTML,验证码以大号字体突出显示
管理员与运营
- 管理员 GUI:发信、管理指定玩家邮箱、重载配置、近期上线筛选、领取邮件、领取命令设置
- 控制台可向在线 / 离线玩家投递;
recent按最近上线时间(1–3650 天)群发 - 领取邮件:玩家点击后由控制台执行服主预设命令,单封邮件只领一次,状态先写盘再执行
- 可配置 OpenAI-compatible AI 内容审核(仅玩家邮件);链接与常见服务器宣传先由本地规则拦截,远程审核异常时 fail-closed 拒绝发送;管理员 / 控制台邮件免审核
- Paper / Folia 调度适配,存储、SMTP、审核网络请求异步执行
三、玩家命令
/mail 打开邮件中心
/mail send <玩家> <正文> 普通发信(免费额度)
/mail sendex <玩家> <正文> 付费发信
/mail template <模板名> <玩家> 发送模板邮件
/mail list 列出邮件
/mail read <ID> 阅读邮件
/mail clear <ID|all> 删除 / 清空邮箱
/mail bindeamil <邮箱> 申请绑定验证码
/mail verifyemail <验证码> 完成邮箱绑定
/mail myemail 查看绑定邮箱
/mail unbindemail 解绑
邮箱绑定同时兼容正确拼写 /mail bindemail <邮箱>。
四、管理员命令
/mailadmin 管理主菜单(玩家可用 GUI)
/mailadmin send [online|offline] <玩家> <主题> <正文> 在线 / 离线投递
/mailadmin recent <天数> <主题> <正文> 近期上线玩家群发
/mailadmin claim <玩家> <主题> <正文> 发送领取邮件
/mailadmin claimcommand <命令模板> 设置领取命令
/mailadmin listall <玩家> 查看邮件数 / 未读数
/mailadmin clearall <玩家> 清空玩家邮箱
/mailadmin reload 重载配置
领取命令示例:
/mailadmin claimcommand give {player} diamond 3
/mailadmin claim Alex 新手奖励 完成新手任务后点击领取
模板必须且只能包含一个 {player},并拒绝命令拼接字符。请只填写可信的奖励命令。
五、安装(三步就能发信)
- 把
xvmail-1.7.0.jar放入plugins/,启动一次生成配置。 - 处理审核:
moderation.enabled默认true且 Key / 模型为空,审核是 fail-closed 的,不配服务就会拒绝所有发信。请填好兼容接口的api-url/api-key/model,或明确改成enabled: false(本地链接与宣传拦截仍会生效)。 - 配置 SMTP(验证码与真实邮件都需要):
smtp:
enabled: true
host: smtp.qq.com
port: 465
username: "your@qq.com"
password: "邮箱 SMTP 授权码"
from-address: "your@qq.com"
from-name: "teana server"
use-ssl: true
use-tls: false
timeout: 10000
email-bind:
enabled: true
auto-send-real-email: true
from-name 就是真实邮件里显示的服务器名。QQ / 163 一般用 465 + SSL 与授权码;Gmail / Outlook 一般用 587 + STARTTLS。改完执行 /mailadmin reload。
付费发送(可选):
sending:
daily-free-limit: 10
daily-paid-limit: 20
currency: vault
paid-cost: 100.0
Vault 需要再装 EssentialsX / CMI 等经济实现;用 PlayerPoints 请把 currency 改成 playerpoints。启动日志会打印 付费发送货币=...:<状态>,扣费失败时玩家和后台都能看到具体原因。
六、真实邮件效果说明
插件内置两套可自定义的 HTML 模板,按来源自动选择:
| 场景 | 模板 | 效果 |
|---|---|---|
| 玩家 → 玩家 | Player Mail | 品牌栏、圆形首字母头像、发件玩家 ID、「向你发送了一封邮件 · 服务器名」、正文、附件说明、游戏内回复提示、页脚版权 |
| 管理员 / 控制台 / 系统 / 群发 / 领取邮件 / 验证码 | System Notice | 品牌栏、System Notice 标记、通知类型标签、大标题、正文、页脚;验证码用高亮区块突出 6 位数字 |
举个例子:服务器名设为 teana server,玩家 Steve 给已绑定邮箱的 Alex 发信,Alex 收到的邮件发件人显示 Steve (via teana server),头像圆里是 S,正文下方标注附件情况,页脚写明由玩家系统自动发送。管理员发的通知则显示服务器名并带 系统通知 标签。
模板文件在 plugins/xvmail/templates/player-mail.html 与 system-mail.html,首次启动自动释放;品牌名直接取 smtp.from-name,配色和文案可编辑 HTML 调整,改完 /mailadmin reload 生效,不需要重新编译插件。邮件底部带一行「邮件系统由 xvmail 插件提供」。占位符由插件填充:玩家模板用 [player_name]、[player_initial]、[server_name]、[Article]、[Attachment_content];系统模板用 [notice_type]、[notice_title]、[notice_content]。玩家填写的内容一律转义成纯文本,避免邮件里被注入 HTML。
七、数据文件与备份
plugins/xvmail/
├── config.yml 配置(含密钥,注意保密)
├── email_bindings.yml 已验证的邮箱绑定
├── daily_quotas.yml 每日发送计数
└── mail/
├── <uuid>.yml 每位玩家的邮件
└── pending-attachments.yml 待退回的附件物品
建议停服后整体备份。写入采用临时文件 + 原子替换,降低崩溃时数据损坏的风险。
八、常见问题
Q:装好之后一封邮件都发不出去?
A:九成是审核。默认 moderation.enabled: true 但没填 Key / 模型,接口调用失败就拒绝发送。配置审核服务或关掉 AI 审核即可。另外本地规则会拦域名、邮箱地址、IP 和部分「服务器 + 加入 / 欢迎」组合,发信时避免这些写法。
Q:游戏里收到了,真实邮箱没有?
A:确认玩家已 /mail verifyemail 绑定成功、SMTP 已启用且授权码正确、同步开关为 true、邮件不在垃圾箱。同步失败不影响游戏内邮件,后台会有日志。
Q:邮件发件人怎么是服务器名?
A:管理员、控制台、系统发的邮件就显示服务器名;只有玩家互发才显示玩家名 + via 服务器名。若玩家邮件也显示服务器名,检查 mail.console-sender-name 是否被设成了玩家名。
Q:付费发送扣不了钱?
A:Vault 只是桥接层,还需要经济实现插件;currency 也要和实际安装的插件一致。启动日志和扣费失败提示会给出具体原因。发送失败时费用与次数都会退回。
Q:需要数据库吗?
A:不需要,当前是 YAML 存储;SQLite 未实现。
九、1.7.0 更新内容
- 真实邮件同步默认开启,并补上管理员群发路径;旧配置首次启动自动升级到
config-version: 2 - 真实邮件升级为完整 HTML 模板,玩家互发显示玩家名与来源服务器,不再统一显示服务器名
- 明确
text/html; charset=UTF-8与X-Mailer头,验证码邮件同样使用 HTML 样式 - 修复 Vault / PlayerPoints 扣费失败:改用官方
OfflinePlayer方法签名,兼容旧版 String 重载与 PlayerPoints 新旧 API - 增加经济服务启动诊断、扣费失败具体原因、同步失败与 SMTP 队列拒绝日志
- 玩家与服主教程、BBS 发布稿全面重写
十、注意事项与已知限制
- 审核会把邮件主题与正文发送到服主配置的第三方接口;SMTP 邮件也会经过所选服务商。请确认数据政策、告知玩家,并保管好
config.yml里的 API Key 与邮箱授权码。 - 本地链接 / 宣传规则不可关闭,且可能误伤
Hi.Hello、正文邮箱地址、服务器欢迎新人加入等正常文本,上线前请用本服常见措辞实测。 - 领取奖励属于「最多执行一次」:状态先写盘再执行命令,极端情况下(写盘后崩溃)可能出现已标记领取但奖励未发;奖励命令建议做成幂等。
- 删除 / 清空带未领取附件的邮件,物品不会退回;SMTP 任务队列上限 128,超大群发建议分批。
- 没有过期邮件自动清理;外部
XvMailAPI只覆盖基础收发、未读与邮箱绑定查询。 - 编译目标为 Paper API 1.21.4,源码声明 Folia 调度支持;尚未在真实 Paper / Folia 服务器完成装载验证,也没有自动化测试。请先在测试服验证启动关闭、在线 / 离线收件、GUI 路径、SMTP、经济扣费退款、附件与领取并发路径,再上正式服。兼容范围仅按已核对的编译目标与源码声明描述。
感谢各位服主与玩家的反馈,祝大家收信愉快。

