124 lines
5.1 KiB
Markdown
124 lines
5.1 KiB
Markdown
# 轻量级临时邮件项目 (Email Unlimit)
|
||
|
||
本项目是一个轻量级的、可自托管的临时邮件解决方案。它允许您使用自己的域名接收邮件,并通过一个简洁的网页界面来查看这些邮件。
|
||
|
||
与 `Mailu` 等复杂的邮件套件不同,本项目采用了一个极简的 Node.js 服务来直接接收和处理邮件,部署和维护都非常简单。
|
||
|
||
## 技术架构
|
||
|
||
* **前端 (Frontend)**: 使用 Vue.js 构建的单页面应用,负责展示收到的邮件列表。
|
||
* **后端 (Backend)**:
|
||
* 使用 Node.js 和 Express 搭建的 API 服务器。
|
||
* 内置一个轻量级的 SMTP 服务器 (`smtp-server`),用于直接接收邮件,无需外部邮件服务。
|
||
* 负责将收到的邮件解析并存入数据库。
|
||
* **数据库 (Database)**: 需要一个外部的 MySQL 数据库来存储邮件信息。
|
||
* **部署 (Deployment)**: 后端服务通过 Docker Compose 进行容器化部署,前端静态文件由宿主机的 Nginx 提供服务。
|
||
|
||
## 部署要求
|
||
|
||
在开始之前,<EFBFBD><EFBFBD>确保您已准备好以下环境:
|
||
|
||
1. 一台拥有公网 IP 的 Linux 服务器。
|
||
2. 一个您自己的域名。
|
||
3. 服务器上已安装 `Docker` 和 `Docker Compose`。
|
||
4. 服务器上已安装 `Nginx`。
|
||
5. 一个可用的外部 MySQL 数据库,并已创建好数据库。
|
||
6. 本地开发环境已安装 `Node.js` 和 `npm` (用于构建前端)。
|
||
|
||
## 部署步骤
|
||
|
||
### 步骤 1: 配置域名 DNS
|
||
|
||
要让邮件能正确发送到您的服务器,您必须配置域名的 `MX` 记录。
|
||
|
||
1. 登录您的域名注册商(如 GoDaddy, Cloudflare 等)。
|
||
2. 找到 DNS 解析设置。
|
||
3. 添加一条 `MX` 记录:
|
||
* **类型 (Type)**: `MX`
|
||
* **名称 (Name/Host)**: `@` (代表您的根域名)
|
||
* **值 (Value/Points to)**: `您的服务器公网 IP 地址`
|
||
* **优先级 (Priority)**: `10`
|
||
|
||
> **注意**: DNS 记录生效可能需要几分钟到几小时。
|
||
|
||
### 步骤 2: 部署后端服务
|
||
|
||
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 # 替换为您的数据库名称
|
||
```
|
||
4. 在 `backend` 目录下有一个 `init.sql` 文件,请手动将其中的 SQL 命令在您的外部数据库中执行,以创建所需的表。
|
||
5. 在项目根目录,使用 Docker Compose 启动后端服务:
|
||
```bash
|
||
docker-compose up -d --build
|
||
```
|
||
此命令会构建并以后台模式启动后端容器。服务将监听服务器的 `5182` (API) 和 `25` (SMTP) 端口。
|
||
|
||
### 步骤 3: 构建和部署前端
|
||
|
||
1. **在您的本地开发机上**,进入 `frontend` 目录。
|
||
2. 安装依赖并构建静态文件:
|
||
```bash
|
||
npm install
|
||
npm run build
|
||
```
|
||
这将在 `frontend/dist` 目录下生成所有用于部署的静态文件。
|
||
3. 将 `frontend/dist` 目录下的 **所有文件** 上传到您服务器的指定位置,例如 `/var/www/email-unlimit`。
|
||
|
||
### 步骤 4: 配置宿主机 Nginx
|
||
|
||
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
|
||
```
|
||
|
||
## 如何使用
|
||
|
||
1. **访问您的网站**: 在浏览器中打开 `http://your_domain.com`。
|
||
2. **发送测试邮件**: 使用任何邮箱客户端,向 `anything@your_domain.com` (例如 `test@your_domain.com`) 发送一封邮件。
|
||
3. **查看邮件**: 在网站上输入您刚刚使用的收件人地址 (`anything@your_domain.com`),点击查询,即可看到收到的邮件。
|