时光邮局 — Time Letter
给未来的自己或他人写信,在指定时间通过邮件自动发送。
版本: v1.0.0 | 发布日期: 2026年7月
目录
一、项目简介
时光邮局是一个可以独立部署在你自己服务器上的信件投递平台。用户在线撰写信件,设定未来某个日期,系统会在指定时间自动将信件以邮件形式发送到收件人邮箱。
核心场景:
- 给一年后的自己写一封信
- 给朋友/家人在特殊日期发送祝福
- 建立公开信件墙,分享故事与感悟
- 作为企业/社区的纪念日营销工具
架构说明: 本项目需连接授权服务器进行许可证验证和版本更新。
二、功能概览
2.1 用户功能
| 模块 | 功能描述 |
|---|---|
| 用户系统 | 注册、登录、邮箱验证、密码重置、昵称修改、头像上传(需审核) |
| 写信功能 | 富文本编辑器、自定义发送时间、可选择是否公开 |
| 我的信件 | 信件列表管理、详情查看、状态追踪(待发送/已发送/发送失败) |
| 公开信件 | 信件广场浏览、点赞、评论、按热度/时间排序 |
| 订阅系统 | 免费试用(7天)、年付订阅、终身订阅、订阅码激活 |
| 站内消息 | 系统通知、审核结果通知 |
2.2 管理后台功能
| 模块 | 功能描述 |
|---|---|
| 仪表盘 | 总览统计:用户数、信件数、发送成功率、今日数据 |
| 用户管理 | 用户列表、搜索筛选、状态管理(启用/禁用/封禁)、角色分配 |
| 信件管理 | 全部信件列表、审核(通过/拒绝)、状态变更、批量操作 |
| 评论审核 | 公开信评论审核、敏感词过滤、通过/拒绝 |
| 开发者公告 | 接收查看授权服务器发来的公告通知 |
| 系统设置 | 站点信息、邮件配置(SMTP)、维护模式、伪静态开关(付费功能) |
| 订阅激活 | 输入订阅码激活年付或终身订阅 |
| 域名绑定 | 更换绑定的域名 |
| 更新管理 | 检查更新、一键升级 |
2.3 系统特性
- PC/Mobile 双端物理隔离:自动检测设备类型,加载独立的 CSS 和组件
- 内容审核体系:敏感词库 + 信誉分机制(≥80 分自动过审)
- 自动更新:后台一键检查并更新到最新版本
- 维护模式:支持手动/定时开启,包含倒计时恢复页面
- 速率限制:登录、注册、发信等关键操作内置频率限制
- Redis 缓存:可选启用 Redis 提升性能
三、技术栈与运行环境
3.1 技术栈
| 层级 | 技术选型 |
|---|---|
| 后端语言 | PHP 8.1+ |
| 数据库 | MySQL 5.7+(InnoDB 引擎,utf8mb4 字符集) |
| Web 服务器 | Nginx(推荐)或 Apache |
| 邮件库 | PHPMailer 6.6+(已内置) |
| 前端框架 | Bootstrap 5 + jQuery |
| 图表库 | Chart.js 3.9 |
| CSS 方案 | 自研 PC/Mobile 双端独立 CSS |
| 缓存 | 文件缓存(默认)/ Redis(可选) |
| 配置格式 | .env 文件 |
| 密码加密 | bcrypt(password_hash) |
| 会话 | PHP Session + CSRF Token |
| 服务器系统 | Debian 12(推荐),兼容 Ubuntu 20.04+ / CentOS 7+ |
3.2 服务器最低配置
| 项目 | 建议配置 | 说明 |
|---|---|---|
| 操作系统 | Debian 12 | 推荐使用宝塔面板管理 |
| CPU | 1 核以上 | 2 核更佳 |
| 内存 | 2 GB 以上 | 含 MySQL 运行开销 |
| 磁盘 | 2 GB 以上可用空间 | 含项目文件 + 数据库 + 日志 |
| PHP | 8.1(必须) | 不支持 7.x 及以下 |
| MySQL | 5.7+(推荐) | 最低兼容 5.6.5 |
| Web 服务器 | Nginx 1.18+ | 推荐 |
3.3 必需 PHP 扩展
| 扩展 | 用途 | 是否必须 |
|---|---|---|
| pdo + pdo_mysql | 数据库连接 | ✅ 必须 |
| gd | 验证码生成、图片处理 | ✅ 必须 |
| mbstring | 多字节字符串处理 | ✅ 必须 |
| fileinfo | 文件类型检测 | ✅ 必须 |
| openssl | 加密与安全通信 | ✅ 必须 |
| curl | HTTP 远程请求 | ✅ 必须 |
| json | JSON 数据处理 | ✅ 必须 |
| xml | XML 解析 | ✅ 必须 |
| zip | 压缩包处理(系统更新) | ✅ 必须 |
四、安装前准备
4.1 你需要准备
- 一台服务器(VPS 或云服务器),推荐安装 Debian 12 系统
- 宝塔面板 已安装在服务器上(如未安装,访问 bt.cn 查看教程)
- 一个域名(如
yourdomain.com),已解析到服务器 IP - SSL 证书(推荐,宝塔可一键申请免费 Let's Encrypt 证书)
4.2 环境确认清单
| 检查项 | 要求 | 检查方法 |
|---|---|---|
| 宝塔面板 | 最新稳定版 | 登录面板查看版本号 |
| PHP | 8.1 已安装 | 软件商店 → 已安装 |
| MySQL | 5.7 已安装 | 软件商店 → 已安装 |
| Nginx | 已安装 | 软件商店 → 已安装 |
| 域名解析 | 已指向服务器 IP | ping 域名确认 |
五、安装步骤详解(共 5 步)
以下步骤请严格按顺序操作,不要跳过任何一步。
第一步:在宝塔中创建网站站点
登录宝塔面板(浏览器访问
http://你的服务器IP:8888)左侧菜单点击 网站 → 左上角 添加站点
填写站点信息:
字段 填写内容 域名 你的域名(如 yourdomain.com)PHP 版本 PHP-81 数据库 选择 MySQL,勾选"自动创建数据库" 点击 提交
创建后请记下以下信息(后续步骤需要):
数据库名: ____________
数据库用户名: ____________
数据库密码: ____________
站点根目录: /www/wwwroot/你的域名/忘记可在宝塔 → 数据库 中查看。
第二步:安装 PHP 必需扩展
宝塔 → 软件商店 → 找到 PHP-8.1 → 点击 设置
选择 安装扩展 标签
确认以下扩展均已安装(绿色即已安装,未安装的点安装):
pdo_mysql— 数据库连接gd— 验证码/图片处理fileinfo— 文件类型检测mbstring— 多字节字符串openssl— 加密通信curl— 远程请求zip— 压缩包处理
安装完成后,在 配置修改 标签中确认上传限制:
upload_max_filesize = 50M post_max_size = 50M修改后点击保存,并重启 PHP。
第三步:上传项目文件
- 宝塔 → 文件 → 进入站点根目录(
/www/wwwroot/你的域名/) - 上传项目压缩包并解压(确保文件直接在根目录下)
重要检查: 解压后,
index.php、install.php等文件应在/www/wwwroot/你的域名/下,而不是子文件夹中。项目已内置 PHPMailer,无需额外安装 Composer 依赖。
第四步:浏览器完成安装向导
- 浏览器访问:
http://你的域名/install.php 按向导完成安装:
Step 0 — 环境检测
- 自动检查 PHP 版本、扩展、目录权限
- 全部绿色 ✔ 通过后点击下一步
Step 1 — 授权连接
- 系统自动申请 API Key,全程自动完成
Step 2 — 数据库配置
- 填写第一步记下的数据库名、用户名、密码
- 主机填
127.0.0.1
Step 3 — 管理员账户
- 设置管理员邮箱和登录密码
Step 4 — 执行安装
- 自动创建数据库表、写入默认配置
- 生成
.env和installed.lock文件
Step 5 — 完成
- 显示安装报告,提供后台入口
第五步:安装后安全检查
- 删除安装文件: 宝塔 → 文件 → 找到
install.php→ 右键删除 - 设置目录权限:
# SSH 终端执行
chmod -R 755 /www/wwwroot/你的域名
chown -R www:www /www/wwwroot/你的域名
chmod 777 /www/wwwroot/你的域名/uploads
chmod 777 /www/wwwroot/你的域名/logs
chmod 777 /www/wwwroot/你的域名/runtime六、安装后必要配置
6.1 配置邮件发送(SMTP)
不配置此项,所有信件无法发送。
- 登录后台 → 系统设置 → 邮件配置
- 填写 SMTP 信息:
以 QQ 邮箱 为例:
| 字段 | 填写内容 |
|---|---|
| SMTP 服务器 | smtp.qq.com |
| SMTP 端口 | 465 |
| 加密方式 | SSL |
| 发件邮箱 | 你的QQ号@qq.com |
| SMTP 授权码 | 16位授权码(非QQ密码) |
| 发件人名称 | 时光邮局 |
获取 QQ 邮箱授权码: QQ 邮箱 → 设置 → 账户 → POP3/IMAP/SMTP服务 → 生成授权码 → 按短信提示操作 → 获取 16 位授权码。
其他邮箱参考:
| 邮箱 | SMTP服务器 | 端口 | 加密 |
|---|---|---|---|
| 163邮箱 | smtp.163.com | 465 | SSL |
| Gmail | smtp.gmail.com | 587 | TLS |
| 阿里企业邮 | smtp.qiye.aliyun.com | 465 | SSL |
| 腾讯企业邮 | smtp.exmail.qq.com | 465 | SSL |
配置完成后,点击 测试发送 验证配置是否生效。
6.2 配置定时任务(Cron)
不配置此项,信件不会自动发送。
系统只需 1 个计划任务,每 1 分钟执行一次,自动完成信件投递和系统自检。
宝塔面板设置方法:
- 宝塔 → 计划任务 → 添加任务
填写:
字段 值 任务类型 Shell 脚本 任务名称 时光邮局定时任务 执行周期 N 分钟 → 填 1脚本内容 见下方
/www/server/php/81/bin/php /www/wwwroot/你的域名/cron/run.php >> /www/wwwroot/你的域名/logs/cron.log 2>&1- 点击确定保存后,可点击 执行 手动测试一次。
6.3 设置站点信息(建议)
- 后台 → 系统设置 → 站点信息
- 建议配置网站名称、网站描述和关键词(影响 SEO 和浏览器标签显示)。
6.4 伪静态配置(可选,付费功能)
项目默认使用 ?page= 参数路由,无需额外配置即可正常运行。开启伪静态后,URL 将从 /index.php?page=home 变为 /home,更美观。
如需开启:后台 → 系统设置 → 网站设置 → 伪静态配置。
6.5 维护模式
后台可开启全站维护模式,开启后前台显示维护页面,管理员仍可正常访问后台。
七、管理后台使用指南
7.1 访问后台
http://你的域名/admin/使用安装时设置的管理员邮箱和密码登录。
7.2 管理功能速览
仪表盘(首页)查看核心运行数据:总用户数、总信件数、已发送/待发送数量、今日新增、发送成功率。
用户管理
- 搜索:按用户名、邮箱、ID 搜索
- 筛选:按状态(正常/禁用/封禁)、角色(用户/审核员/管理员)
- 操作:编辑用户信息、修改角色、启用/禁用/封禁、重置密码
- 查看:用户详细信息、发送记录
信件管理
- 查看全部信件的标题、作者、收件人、发送时间、状态
- 审核信件:通过 / 拒绝
- 批量操作:批量通过、批量拒绝、批量删除
评论审核
- 公开信评论列表,支持按状态筛选(待审/已通过/已拒绝)
- 批量审核操作
- 评论内容自动敏感词检测
开发者公告
- 接收查看授权服务器发来的公告通知
- 侧边栏红点提醒未读公告
订阅激活
- 输入订阅码激活年付或终身订阅
- 在后台 → 订阅管理 页面操作
系统设置
- 站点信息、邮件配置(含 SMTP 测试发送)
- 维护模式(手动/定时)
- 伪静态开关(付费功能)
- 内容审核开关
域名绑定
- 查看当前绑定域名
- 更换绑定域名
更新管理
- 检查是否有新版本
- 一键执行更新
八、定时任务详解
8.1 工作流程
cron/run.php 每分钟执行一次,自动完成:
- 发信:查询到期信件,逐封通过 SMTP 发送,失败自动重试(最多 3 次)
- 系统自检:定时校验站点运行状态
8.2 日志查看
# 查看定时任务日志
tail -100 /www/wwwroot/你的域名/logs/cron.log
# 实时监控
tail -f /www/wwwroot/你的域名/logs/cron.log日志最长保留 5MB,超出自动裁剪到最近 3000 行。
8.3 手动执行测试
/www/server/php/81/bin/php /www/wwwroot/你的域名/cron/run.php手动执行会直接输出所有日志到终端,便于排查问题。
九、常见问题排查
9.1 安装阶段问题
Q1:访问 install.php 显示 404 或空白页
最常见的 3 个原因(按概率排序):
- PHP 版本不是 8.1 → 宝塔 → 网站 → 你的域名 → PHP 版本 → 选 PHP-81 → 保存
- 域名解析未生效 → 用
ping 你的域名确认 IP 是否正确 - 文件未上传到正确目录 → 确认
install.php在/www/wwwroot/你的域名/下
Q2:安装界面"环境检测"有红色 ❌
| 错误提示 | 解决方法 |
|---|---|
| PHP 版本过低 | 安装 PHP 8.1(宝塔 → 软件商店 → PHP → 安装 8.1) |
| pdo_mysql 未安装 | PHP-8.1 → 设置 → 安装扩展 → 勾选 pdo_mysql → 安装 |
| 目录不可写 | 文件管理器 → 右键站点根目录 → 权限 → 755 → 所有者 www → 应用到子目录 |
| 某扩展未安装 | 参照上方列表安装对应扩展并重启 PHP |
Q3:数据库连接失败
按以下顺序排查:
- 数据库名、用户名、密码是否填错(注意不要有多余空格)
- 数据库主机是否填的
127.0.0.1(不要填localhost) - 数据库是否被删除 → 宝塔 → 数据库 → 查看是否存在
Q4:安装时一直转圈
原因:数据库信息有误或数据库用户权限不足。
解决方法:
- 宝塔 → 数据库 → 找到对应数据库 → 点击 权限 → 确认为
ALL PRIVILEGES - 如果不是,改为
ALL PRIVILEGES或删库重建
Q5:安装完成后访问首页仍跳转到 install.php
原因:安装程序未成功生成安装锁文件。
解决:
- 访问
http://你的域名/install.php?reinstall=1重新安装 - 或手动创建锁文件:宝塔 → 文件 → 站点根目录 → 新建文件
installed.lock,内容任意
9.2 运行阶段问题
Q6:部分页面显示 404(如 /home、/compose)
原因:伪静态规则未配置或配置错误。
解决:
- 宝塔 → 网站 → 你的域名 → 设置 → 伪静态
- 确认内容为 Nginx rewrite 规则(见下方伪静态配置示例)
- 不是下拉选择,是直接粘贴代码
- 保存后重启 Nginx
location / {
try_files $uri $uri/ @rewrites;
}
location @rewrites {
rewrite ^/home$ /index.php?page=home last;
rewrite ^/compose$ /index.php?page=compose last;
rewrite ^/login$ /index.php?page=login last;
rewrite ^/register$ /index.php?page=register last;
rewrite ^/public$ /index.php?page=public last;
rewrite ^/letter/([0-9]+)$ /index.php?page=letter_detail&id=$1 last;
rewrite ^/(.*)$ /index.php?page=$1 last;
}如果你使用的是 Apache,编辑
.htaccess文件同样可以实现伪静态。
Q7:用户注册后收不到验证邮件
按顺序排查:
- SMTP 配置是否已填写(后台 → 系统设置 → 邮件配置)
- SMTP 授权码是否正确(QQ 邮箱是授权码不是密码)
- 使用"测试发送"按钮验证配置
- 检查邮箱垃圾箱
Q8:信件到达时间后没有发送
按顺序排查:
- 定时任务是否配置(宝塔 → 计划任务 → 查看列表)
- 定时任务是否执行(查看
logs/cron.log是否有最近记录) - SMTP 配置是否正常(后台测试发送)
- 手动执行一次测试:
/www/server/php/81/bin/php /www/wwwroot/你的域名/cron/run.php- 查看输出中的具体错误信息
Q9:页面显示 500 错误
解决步骤:
- 查看错误日志:宝塔 → 网站 → 你的域名 → 错误日志
- 或终端执行:
tail -50 /www/wwwroot/你的域名/logs/error.log
tail -50 /www/wwwlogs/你的域名.error.logQ10:图片上传失败
可能原因:
uploads/目录权限不足 → 设为 777- PHP 上传限制太小 → PHP-8.1 → 配置修改 → 调大
upload_max_filesize和post_max_size - 磁盘空间不足 → 宝塔首页查看
Q11:页面样式错乱
按 Ctrl + F5 强制刷新浏览器缓存。如仍异常,检查浏览器控制台(F12)是否有 CSS 加载失败的提示。
Q12:SSL 证书到期
- 宝塔 → 网站 → 你的域名 → 设置 → SSL
- 如果使用了 Let's Encrypt,点击"续签"
- 如使用付费证书,重新上传新证书
9.3 后台问题
Q13:后台无法登录
- 确认使用管理员邮箱登录(不是普通用户邮箱)
- 如忘记密码,通过数据库直接重置:宝塔 → 数据库 → 管理(phpMyAdmin)→
users表 → 编辑管理员行的password字段
Q14:更新失败
- 检查
runtime/目录是否可写 - 查看后台错误日志了解具体错误
- 确认
.env中的SUBSCRIPTION_API_KEY配置正确
宝塔面板常用操作速查
| 操作 | 路径 |
|---|---|
| 添加站点 | 网站 → 添加站点 |
| 修改 PHP 版本 | 网站 → 域名 → 设置 → PHP 版本 |
| 安装 PHP 扩展 | 软件商店 → PHP-8.1 → 设置 → 安装扩展 |
| 配置伪静态 | 网站 → 域名 → 设置 → 伪静态 |
| 添加 SSL | 网站 → 域名 → 设置 → SSL |
| 文件管理 | 文件 → 进入目录 |
| 数据库管理 | 数据库 → 找到数据库 → 管理(phpMyAdmin) |
| 添加定时任务 | 计划任务 → 添加任务 |
| 查看服务器负载 | 面板首页 |
| 安全设置 | 安全 → 防火墙/端口 |
获取帮助
- 技术论坛: https://bbs.diuz.cn
- 演示站点: https://demo.timecaps.cn
- 开发者: 飞翔的丢
- 微信: HeyCziyi
时光邮局 v1.0.0 — 给未来的自己或他人写一封信,让时间为你送达。
上一篇
没有了下一篇
没有了