feat:fix README.md

This commit is contained in:
shenjianZ 2025-07-31 11:44:51 +08:00
parent eecac11240
commit f8a4fb3561
3 changed files with 85 additions and 92 deletions

21
LICENSE Normal file
View File

@ -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.

156
README.md
View File

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

BIN
sample.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 KiB