logo
0
0
WeChat Login

时光邮局 (TimeMail)

一个让用户给未来的自己写信的Web应用。用户可以在页面留下想对自己说的话,设置未来的收信时间,系统会在指定时间自动发送邮件给用户。

🌟 功能特点

  • ✍️ 写信功能:简洁的文本编辑器,支持多行文本输入
  • 定时发送:设置未来的收信时间,精确到分钟
  • 📧 自动投递:系统会在指定时间自动发送邮件
  • 📚 历史记录:查看所有寄出的历史信件和状态
  • 🔒 隐私保护:只显示信件标题,不显示正文内容
  • 📱 响应式设计:适配桌面端、平板和移动端

🛠️ 技术栈

前端

  • 框架: React 18 + TypeScript
  • 构建工具: Vite
  • 样式: Tailwind CSS
  • 路由: React Router DOM
  • 状态管理: Zustand
  • UI组件: Lucide React (图标)
  • 通知: Sonner (Toast)

后端

  • 框架: FastAPI (Python 3.12)
  • 数据库: PostgreSQL
  • ORM: SQLAlchemy 2.0
  • 定时任务: APScheduler
  • 邮件服务: SMTP (smtplib)

🚀 快速开始

环境要求

  • Node.js 18+ 和 pnpm
  • Python 3.12+
  • PostgreSQL 15+

安装依赖

  1. 克隆项目
git clone <repository-url>
cd timemail
  1. 安装前端依赖
pnpm install
  1. 安装后端依赖
cd api
pip install -r requirements.txt

配置环境变量

  1. 前端配置 (.env)
VITE_API_BASE_URL=http://localhost:8000
VITE_APP_NAME=时光邮局
VITE_APP_VERSION=1.0.0
  1. 后端配置 (api/.env)
# 数据库配置
DATABASE_URL=sqlite:///./timemail.db  # 开发环境
# DATABASE_URL=postgresql://user:password@localhost:5432/timemail  # 生产环境

# 邮件服务配置 (需要真实的SMTP服务)
SMTP_SERVER=smtp.gmail.com
SMTP_PORT=587
SMTP_USERNAME=your-email@gmail.com
SMTP_PASSWORD=your-app-password
SMTP_FROM_NAME=时光邮局
SMTP_FROM_EMAIL=noreply@timemail.com

# API配置
API_HOST=0.0.0.0
API_PORT=8000
API_RELOAD=true

# 定时任务配置
SCHEDULER_INTERVAL_MINUTES=5

启动应用

开发模式 (推荐)

# 启动前端和后端(同时运行)
pnpm fullstack

单独启动

# 启动前端
pnpm dev

# 启动后端(在api目录下)
cd api
python main.py
# 或者
python -m uvicorn main:app --reload --host 0.0.0.0 --port 8000

访问应用

📖 API文档

创建时光邮件

POST /api/time-letters
Content-Type: application/json

{
  "content": "亲爱的未来的我,希望你还记得今天的心情...",
  "delivery_email": "user@example.com",
  "delivery_time": "2024-12-31T10:00:00Z"
}

获取历史记录

GET /api/time-letters/history?email=user@example.com

🧪 测试

前端测试

pnpm run test

后端测试

cd api
pytest

🚀 部署

前端部署

  1. 构建生产版本
pnpm build
  1. 部署到静态托管服务 (Vercel, Netlify, 等)

后端部署

  1. 配置生产环境变量
  2. 使用Docker或云服务部署
  3. 配置PostgreSQL数据库
  4. 配置真实的SMTP邮件服务

📁 项目结构

timemail/
├── src/                    # 前端源代码
│   ├── components/         # 可复用组件
│   ├── pages/              # 页面组件
│   ├── services/           # API服务
│   ├── store/              # 状态管理
│   ├── utils/              # 工具函数
│   └── router.tsx          # 路由配置
├── api/                    # 后端源代码
│   ├── app/                # 应用代码
│   │   ├── models/         # 数据模型
│   │   ├── routers/        # API路由
│   │   ├── services/       # 业务逻辑
│   │   └── utils/          # 工具函数
│   ├── migrations/         # 数据库迁移
│   └── main.py             # 应用入口
├── public/                 # 静态资源
├── package.json            # 前端依赖
├── requirements.txt        # 后端依赖
└── README.md              # 项目文档

🤝 贡献

欢迎提交Issue和Pull Request来改进这个项目!

📄 许可证

MIT License - 详见 LICENSE 文件

🙏 致谢

  • 感谢所有为开源社区贡献的项目和工具
  • 特别感谢React、FastAPI、Tailwind CSS等优秀框架

💌 时光邮局 - 连接过去与未来的桥梁,让每一封信都成为珍贵的回忆。

About

No description, topics, or website provided.
Language
TypeScript62.9%
Python31.2%
JavaScript1.7%
HTML1%
Others3.2%