Luogu-Contest-Reminder:更好的邮箱比赛提醒系统

· · 科技·工程

洛谷上的比赛每隔几天就会更新一批,但是经常容易忘了记住具体时间。

有时候打开比赛列表,发现某场比赛“昨天晚上”就开了。

前面已经有人做过现成的邮件提醒服务,但它运行在别人的服务器上,不开源,还有广告(虽然没招到商),也不能自己配置。

(为什么我感觉我跟某些互联网公司一样,看到一个新玩意就自己做一个竞品)

于是我做了 Luogu Contest Reminder:一个可以自部署的洛谷比赛邮件提醒系统,基于 Python FastAPI + React,完全开源,没有广告。

(为什么我感觉我跟某些互联网公司一样,看到一个新玩意就自己做一个竞品)

GitHub ILoveScratch2/Luogu-Contest-Reminder

你可以直接前往 r.ilovescratch.us.ci 试用在线部署的版本,或者按照下面的说明自己部署。

功能概览

用户侧:

管理员侧(首次启动时创建):

调度器默认在每日北京时间 08:00 运行,向所有开启了提醒的活跃用户发送接下来 24 小时内开始的比赛通知,已发送过的比赛不会重复推送。

自部署

:::warning[前置要求]{open}

后端

git clone https://github.com/ILoveScratch2/Luogu-Contest-Reminder.git
cd Luogu-Contest-Reminder/backend
pip install -r requirements.txt
python main.py

首次运行会要求创建管理员账号(输入邮箱和密码,密码输入时不会在控制台显示),之后直接启动。

后端 API 默认监听 http://0.0.0.0:8000。数据库文件 lgcontest.db(SQLite)和密钥文件 secret.key 会在当前目录自动生成,注意要保护 secret.key 文件。

前端

cd ../frontend
npm install
npm run dev

访问 http://localhost:5173,用管理员账号登录,完成 SMTP 配置后就可以正常收发邮件了。

调试时前后端需要同时运行,如果你要部署,可以使用 npm run build 构建前端,然后将构建产物放在后端的 static 目录下,后端会自动提供前端服务。

SMTP 配置

进入管理员面板的“SMTP 配置”页面,填入以下信息:

字段 说明
服务器 SMTP 主机地址
端口 SMTP 端口
用户名 邮箱地址
密码 邮箱密码
发件人名称 显示在收件人侧的名字

:::warning[注意]{open} QQ 邮箱、163 邮箱等需要在邮箱设置中手动开启 SMTP 服务,并使用生成的授权码而非登录密码。 :::

如果你使用的是个人邮箱服务商提供的 SMTP,可以去 Mozilla ISPDB 查找对应的服务器配置。

填写后,可以用“测试连接”,测试 SMTP 配置。

License

本项目使用 AGPL-3.0 许可证。

如果你也曾错过过洛谷比赛,欢迎试试。有 Bug 或功能建议请在 GitHub Issues 提出。