email-unlimit/info.md

350 lines
9.4 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

前端:**Vue**
后端:**Node.js + Express**
数据库:**MySQL**
邮件服务:**Mailu**
我帮你重新整理并生成**完整且清晰**的架构图、流程图、技术栈表 + 项目结构:
---
## 🧩 **一、架构图新版Vue + Express**
```
┌────────────────────────────┐
│ 用户 │
│ ┌──────────────────────┐ │
│ │ mail.shenjianl.cn 前端网站 │ ←─────┐
│ │ (Vue) │ │
│ └──────────────────────┘ │
└────────────┬─────────────┘
│ HTTP (REST API)
┌────────────────────────────┐
│ Node.js 后端 (Express) │
│ - 生成随机邮箱地址 │
│ - 查询收件箱 │
│ - 邮件接收解析写数据库 │
└────────────┬─────────────┘
│ MySQL
┌────────────────────────────┐
│ MySQL │
│ - emails 表 │
│ - email_attachments 表 │
└────────────┬─────────────┘
┌────────────────────────────┐
│ 邮件服务器Mailu
│ - SMTP 接收外部邮件 │
│ - Catch-all 所有收件人 │
│ - 调用 Node.js 脚本入库 │
└────────────┬─────────────┘
┌────────────────────────────┐
│ DNS │
│ - MX: mail.shenjianl.cn │
│ - A: mail.shenjianl.cn → IP │
└────────────────────────────┘
```
---
## 📝 **二、流程图:接收 & 查看流程**
```
【外部发件人】
发邮件到 abc123@shenjianl.cn
DNS MX 查找 mail.shenjianl.cn
Mailu 收到邮件 (SMTP)
调用 Node.js 脚本 (saveEmail.js)
simpleParser 解析邮件内容
写入 MySQL:
recipient, sender, subject, body, received_at
用户访问网页:
mail.shenjianl.cn
Vue 前端请求后端 API:
GET /api/messages?recipient=abc123@shenjianl.cn
后端查询 MySQL 返回邮件列表
前端展示收件箱
```
---
## ⚙ **三、技术栈清单(新版)**
| 层级 | 功能 | 技术选型 |
| -------- | -------------- | ----------------------------------- |
| 域名 & DNS | MX/A 解析 | 阿里云 DNS / Cloudflare |
| 邮件服务器 | 接收所有外部邮件 | Mailu基于 Postfix/Dovecot |
| 邮件解析 | 提取收件人/正文/主题/附件 | Node.js (mailparser) |
| 后端 API | 生成邮箱 / 查询收件箱 | Node.js + Express |
| 数据库 | 存储邮件信息 | MySQL |
| 前端 | 用户界面 / 展示收件箱 | Vue.js |
| 部署 & 管理 | 容器化 / 部署 | Docker + docker-compose |
| 安全 | HTTPS / 防滥用 | Let's Encrypt + Nginx 反代 + IP限流/黑名单 |
---
## 🛠 **四、项目结构建议(新版)**
```
📦 project-root
├── frontend/ # Vue 前端
│ └── (组件/页面/接口)
├── backend/ # Node.js 后端
│ ├── app.js # Express 主程序
│ ├── saveEmail.js # 接收邮件脚本:解析并写入数据库
│ └── db.js # 数据库连接
├── docker-compose.yml # Mailu + Node.js + MySQL
├── mailu.env # Mailu 配置
├── README.md
```
---
**总结:**
* 前端Vue 只负责界面和展示
* 后端Express 提供 API + 接收邮件写 MySQL
* 邮件服务器Mailu catch-all 接收所有地址
* DNS配置 MX / A 指向服务器
---
好的!
下面我给你**直接写好**适配新版架构的:
`docker-compose.yml`包含Vue 前端 + Node.js Express 后端 + MySQL + Mailu 邮件服务器)
✅ MySQL 建表 SQL
---
## ✅ **1⃣ docker-compose.yml**
> ⚠️ 注:
* Vue 前端用 `npm run serve``npm run build` 后放 Nginx 也行,这里为了简单直接跑开发服务
* Mailu 是官方 Docker 邮件套件,需要 `mailu.env` 配置
* 建议生产用 HTTPS + Nginx下面只是开发演示架构
```yaml
version: '3.8'
services:
mysql:
image: mysql:8
container_name: mail_mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: myrootpassword
MYSQL_DATABASE: maildb
MYSQL_USER: mailuser
MYSQL_PASSWORD: mailpassword
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
backend:
build: ./backend
container_name: mail_backend
restart: always
environment:
DB_HOST: mysql
DB_USER: mailuser
DB_PASSWORD: mailpassword
DB_NAME: maildb
ports:
- "3000:3000"
depends_on:
- mysql
frontend:
build: ./frontend
container_name: mail_frontend
restart: always
ports:
- "8080:8080"
depends_on:
- backend
mailu:
image: mailu/mailu:master
container_name: mail_server
restart: always
env_file: mailu.env
ports:
- "25:25" # SMTP
- "465:465" # SMTPS
- "143:143" # IMAP
- "993:993" # IMAPS
- "8081:80" # Mailu admin web UI可选
volumes:
- mailu_data:/data
depends_on:
- mysql
volumes:
mysql_data:
mailu_data:
```
---
## 📦 **2⃣ 建表 SQL**
```sql
CREATE TABLE emails (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
recipient VARCHAR(255) NOT NULL,
sender VARCHAR(255) NOT NULL,
subject VARCHAR(512),
body TEXT,
received_at DATETIME DEFAULT CURRENT_TIMESTAMP,
raw MEDIUMBLOB
);
CREATE TABLE email_attachments (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
email_id BIGINT NOT NULL,
filename VARCHAR(255),
content_type VARCHAR(128),
content LONGBLOB,
FOREIGN KEY (email_id) REFERENCES emails(id) ON DELETE CASCADE
);
```
---
## 📦 **3⃣ mailu.env**(示例配置)
```env
DOMAIN=shenjianl.cn
HOSTNAMES=mail.shenjianl.cn
SECRET_KEY=change-this-to-a-very-random-secret
ADMIN=admin
ADMIN_PASSWORD=adminpassword
DB_FLAVOR=mysql
DB_HOST=mysql
DB_USER=mailuser
DB_PASSWORD=mailpassword
DB_NAME=maildb
```
---
## ✅ **4⃣ 项目结构(推荐)**
```
📦 project-root
├── frontend/ # Vue 前端
│ └── (页面/组件)
├── backend/ # Node.js Express 后端
│ ├── app.js # 提供 API
│ ├── saveEmail.js # 接收邮件脚本
│ └── db.js # 数据库连接
├── docker-compose.yml
├── mailu.env
└── README.md
```
---
**这样就完成了:**
* Vue 前端对接后端 API
* 后端Express接收请求、存储/查询邮件
* Mailu 负责接收 SMTP 邮件并调用脚本写数据库
* MySQL 存储邮件数据
---
以下是针对你域名 `shenjianl.cn` 的**简单版 SPF、DKIM、DMARC DNS TXT 记录示范**你可以直接复制去你买域名的DNS管理后台添加。
---
## 1. SPF 记录
* **类型**TXT
* **主机名**`@` (代表根域名 shenjianl.cn
* **值(内容)**
```
v=spf1 mx ip4:你的服务器公网IP -all
```
> 把 `你的服务器公网IP` 换成你实际服务器的外网IP地址。
---
## 2. DKIM 记录(示例)
假设你的邮件服务器给你生成了一个 selector叫做 `default`,那么:
* **类型**TXT
* **主机名**`default._domainkey`
* **值(内容)**
```
v=DKIM1; k=rsa; p=这里填你的公钥内容
```
> 注意:`p=` 后面是一个很长的字符串,由邮件服务器生成的公钥。
> 你可以让 Mailu 生成 DKIM 密钥,然后复制粘贴到这里。
---
## 3. DMARC 记录
* **类型**TXT
* **主机名**`_dmarc`
* **值(内容)**
```
v=DMARC1; p=quarantine; rua=mailto:admin@shenjianl.cn; pct=100
```
解释:
* `p=quarantine`:不合规邮件放到垃圾箱
* `rua=mailto:admin@shenjianl.cn`:每隔一段时间会收到报告(你可以换成自己的邮箱)
* `pct=100`:所有邮件都应用该规则
---
# 总结
| 类型 | 主机名 | 内容示例 |
| --- | ------------------- | ---------------------------------------------------------------- |
| TXT | @ | `v=spf1 mx ip4:你的服务器公网IP -all` |
| TXT | default.\_domainkey | `v=DKIM1; k=rsa; p=你的公钥` |
| TXT | \_dmarc | `v=DMARC1; p=quarantine; rua=mailto:admin@shenjianl.cn; pct=100` |
---
如果你还没有 DKIM 公钥或者不确定怎么生成,可以告诉我,我帮你写生成步骤。