diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..1a79ae8 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 shenjianZ + +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. diff --git a/README.md b/README.md index 2f30038..5e7d1bf 100644 --- a/README.md +++ b/README.md @@ -1,123 +1,95 @@ -# 轻量级临时邮件项目 (Email Unlimit) +# Email Unlimit - 轻量级、可自托管的临时邮件解决方案 本项目是一个轻量级的、可自托管的临时邮件解决方案。它允许您使用自己的域名接收邮件,并通过一个简洁的网页界面来查看这些邮件。 与 `Mailu` 等复杂的邮件套件不同,本项目采用了一个极简的 Node.js 服务来直接接收和处理邮件,部署和维护都非常简单。 +**在线体验:** [http://mail.shenjianl.cn](http.shenjianl.cn) + +**网站截图**: +![sample.png](./sample.png) + ## 技术架构 * **前端 (Frontend)**: 使用 Vue.js 构建的单页面应用,负责展示收到的邮件列表。 * **后端 (Backend)**: * 使用 Node.js 和 Express 搭建的 API 服务器。 * 内置一个轻量级的 SMTP 服务器 (`smtp-server`),用于直接接收邮件,无需外部邮件服务。 - * 负责将收到的邮件解析并存入数据库。 -* **数据库 (Database)**: 需要一个外部的 MySQL 数据库来存储邮件信息。 -* **部署 (Deployment)**: 后端服务通过 Docker Compose 进行容器化部署,前端静态文件由宿主机的 Nginx 提供服务。 + * 通过 WebSocket 实现新邮件的实时推送。 +* **数据库 (Database)**: 使用 MySQL 存储邮件信息,确保数据的安全性和持久性。 +* **部署 (Deployment)**: 使用 Docker Compose 统一管理后端服务、数据库和 Nginx,实现一键部署。 -## 部署要求 +## 前置条件 -在开始之前,��确保您已准备好以下环境: +在开始之前,请确保您已满足以下条件: -1. 一台拥有公网 IP 的 Linux 服务器。 -2. 一个您自己的域名。 -3. 服务器上已安装 `Docker` 和 `Docker Compose`。 -4. 服务器上已安装 `Nginx`。 -5. 一个可用的外部 MySQL 数据库,并已创建好数据库。 -6. 本地开发环境已安装 `Node.js` 和 `npm` (用于构建前端)。 +### 1. 硬件与域名 +- 一台拥有公网 IP 的云服务器。 +- 一个您自己的域名(建议已完成备案)。 -## 部署步骤 +### 2. 软件环境 +- 服务器上已安装 [Docker 和 Docker Compose](https://docs.docker.com/get-docker/)。 +- 本地开发环境已安装 [Node.js](https://nodejs.org/) (仅用于构建前端)。 -### 步骤 1: 配置域名 DNS +### 3. 域名 DNS 配置 +要让邮件能正确发送到您的服务器,您必须配置域名的 `A` 记录和 `MX` 记录。假设您的域名是 `example.com`,您希望用于收信的子域名是 `mail.example.com`。 -要让邮件能正确发送到您的服务器,您必须配置域名的 `MX` 记录。 - -1. 登录您的域名注册商(如 GoDaddy, Cloudflare 等)。 -2. 找到 DNS 解析设置。 -3. 添加一条 `MX` 记录: - * **类型 (Type)**: `MX` - * **名称 (Name/Host)**: `@` (代表您的根域名) - * **值 (Value/Points to)**: `您的服务器公网 IP 地址` - * **优先级 (Priority)**: `10` +| 类型 | 主机记录/名称 | 记录值/指向 | 备注 | +| :--- | :--- | :--- | :--- | +| A | mail | `您的服务器公网 IP` | 将 `mail` 子域名指向您的服务器 | +| MX | @ | `mail.example.com` | 优先级设置为 10 | > **注意**: DNS 记录生效可能需要几分钟到几小时。 -### 步骤 2: 部署后端服务 +### 4. 申请 SSL/TLS 证书 +为了启用 HTTPS,您需要为您的域名 `mail.example.com` 申请 SSL 证书。您可以从 Let's Encrypt、阿里云、腾讯云等证书颁发机构免费获取。 -1. 将本项目克隆或上传到您的服务器。 -2. 进入项目根目录,编辑 `docker-compose.yml` 文件。 -3. **填写您的外部数据库连接信息**: - ```yaml - services: - backend: - # ... - environment: - - DB_HOST=your_external_db_host # 替换为您的外部数据库主机名或IP - - DB_USER=your_external_db_user # 替换为您的数据库用户名 - - DB_PASSWORD=your_external_db_password # 替换为您的数据库密码 - - DB_NAME=your_external_db_name # 替换为您的数据库名称 +## 部署步骤 + +本部署方案使用 Docker Compose 统一管理所有服务(Nginx, Backend, MySQL),实现一键启动,无需在宿主机上安装 Nginx 或其他依赖。 + +### 步骤 1: 获取并准备项目 +将项目代码下载并解压到您的服务器,例如 `/data/email-unlimit` 目录。 + +### 步骤 2: 上传 SSL 证书 +将您申请到的 SSL 证书文件(通常是 `.pem`/.`crt` 和 `.key` 文件)上传到项目的 `certs` 目录下 (`/data/email-unlimit/certs`)。 + +### 步骤 3: 构建前端静态文件 (本地环境) +1. 在您的**本地开发机**上,进入 `frontend` 目录,修改 `.env` 环境变量文件: + ```env + VITE_APP_DOMAIN=example.com # 改为你的主域名 ``` -4. 在 `backend` 目录下有一个 `init.sql` 文件,请手动将其中的 SQL 命令在您的外部数据库中执行,以创建所需的表。 -5. 在项目根目录,使用 Docker Compose 启动后端服务: - ```bash - docker-compose up -d --build - ``` - 此命令会构建并以后台模式启动后端容器。服务将监听服务器的 `5182` (API) 和 `25` (SMTP) 端口。 - -### 步骤 3: 构建和部署前端 - -1. **在您的本地开发机上**,进入 `frontend` 目录。 -2. 安装依赖并构建静态文件: +2. 安装依赖并构建: ```bash + cd frontend npm install npm run build ``` - 这将在 `frontend/dist` 目录下生成所有用于部署的静态文件。 -3. 将 `frontend/dist` 目录下的 **所有文件** 上传到您服务器的指定位置,例如 `/var/www/email-unlimit`。 +3. 将构建生成的 `dist` 目录(位于 `frontend/dist`)**完整上传**到服务器的 `/data/email-unlimit/frontend` 目录下。 -### 步骤 4: 配置宿主机 Nginx +### 步骤 4: 修改 Nginx 配置 (服务器) +编辑项目根目录下的 `nginx.full.conf` 文件,仅需修改以下三项: +```nginx +server_name mail.example.com; # 改为您自己的域名 +ssl_certificate /etc/nginx/certs/your_certificate.pem; # 改为您自己的证书文件名 +ssl_certificate_key /etc/nginx/certs/your_certificate.key; # 改为您自己的密钥文件名 +``` +> **注意**: 配置文件中的证书路径 `/etc/nginx/certs/` 是容器内的路径,它会映射到宿主机的 `/data/email-unlimit/certs` 目录,请确保文件名正确。 -1. 在服务器上,为您的应用创建一个 Nginx 配置文件,例如 `/etc/nginx/sites-available/email.conf`。 -2. 将以下配置写入该文件。请务必将 `your_domain.com` 和 `root` 路径修改为您自己的配置。 - - ```nginx - server { - listen 443 ssl; - server_name mail.shenjianl.cn; # 替换为您的域名 - ssl_certificate /usr/local/nginx/conf/ssl_certificate/mail/mail.shenjianl.cn_bundle.pem; - ssl_certificate_key /usr/local/nginx/conf/ssl_certificate/mail/mail.shenjianl.cn.key; - # 前端静态文件路径 - root /data/email-unlimit/frontend/dist; - index index.html; - - # 处理 Vue Router 的 history 模式 - location / { - try_files $uri $uri/ /index.html; - } - - # 将 /api 请求反向代理到后端 Docker 容器 - location /api { - proxy_pass http://localhost:5182; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - } - } - ``` -3. 启用该配置并重启 Nginx: - ```bash - # 创建软链接 - sudo ln -s /etc/nginx/sites-available/email.conf /etc/nginx/sites-enabled/ - - # 测试配置语法 - sudo nginx -t - - # 重启 Nginx - sudo systemctl restart nginx - ``` +### 步骤 5: 启动服务 (服务器) +在服务器的项目根目录 (`/data/email-unlimit`) 下执行以下命令: +```bash +# -f 指定使用 docker-compose.full.yml 配置文件,-d 表示后台运行 +docker compose -f docker-compose.full.yml up -d +``` +服务启动后,您可以通过 `docker compose -f docker-compose.full.yml logs -f` 查看实时日志。 ## 如何使用 -1. **访问您的网站**: 在浏览器中打开 `http://your_domain.com`。 -2. **发送测试邮件**: 使用任何邮箱客户端,向 `anything@your_domain.com` (例如 `test@your_domain.com`) 发送一封邮件。 -3. **查看邮件**: 在网站上输入您刚刚使用的收件人地址 (`anything@your_domain.com`),点击查询,即可看到收到的邮件。 +1. **访问您的网站**: 在浏览器中打开 `https://mail.example.com` (替换为您的域名)。 +2. **发送测试邮件**: 使用任何邮箱客户端,向 `anything@example.com` (例如 `test@example.com`) 发送一封邮件。 +3. **查看邮件**: 在网站首页的输入框中输入您刚刚使用的收件人地址 (`test@example.com`),点击查询,即可看到收到的邮件。 + +## 许可证 + +本项目采用 MIT 许可证。详情请参阅 [LICENSE](LICENSE) 文件。 diff --git a/sample.png b/sample.png new file mode 100644 index 0000000..a3419f5 Binary files /dev/null and b/sample.png differ