Initial commit: WpywMail 自建邮件系统:.NET 8 原生 SMTP/IMAP 服务端(DKIM 签名、SPF/DKIM/DMARC 入站校验、SQLite 存储、完整账号体系)、Node 服务端、WinUI 3 客户端与 Web 前端

This commit is contained in:
WpyQwq
2026-09-19 11:19:40 +08:00
commit b8814a7615
84 changed files with 21197 additions and 0 deletions
+92
View File
@@ -0,0 +1,92 @@
# wpyw.mail server
这是独立的邮箱服务端,不包含任何 Webmail 客户端代码。
当前服务端提供:
- SMTP 25:接收发往 `@wpyw.site` 的邮件
- SMTP Submission 587:登录认证后发信
- REST API:供未来独立客户端使用
- 本地 JSON 邮件存储和附件落盘
- 可选外部 SMTP 中继
## 启动
在 `server/` 目录执行:
```powershell
npm install
Copy-Item .env.example .env
notepad .env
npm start
```
必须设置 `MAIL_PASSWORD`,服务端不会使用默认密码启动。
默认监听:
```text
REST API 8787
SMTP 25
SMTP Submission 587
```
测试时可以临时改成非特权端口:
```powershell
$env:WEB_PORT='8787'
$env:SMTP_PORT='2525'
$env:SUBMISSION_PORT='2587'
npm start
```
## API
登录:
```http
POST /api/login
Content-Type: application/json
{"email":"admin@wpyw.site","password":"你的密码"}
```
之后把返回的 token 放入请求头:
```http
Authorization: Bearer <token>
```
主要接口:
```text
GET /api/health
GET /api/config
GET /api/me
GET /api/messages?folder=inbox
GET /api/messages/:id
POST /api/send
POST /api/logout
```
发信请求示例:
```json
{
"to": "[email protected]",
"subject": "测试邮件",
"text": "邮件正文"
}
```
## Cloudflare 和端口
`mail.wpyw.site` 应保持 DNS only,MX 指向 `mail.wpyw.site`。网站或未来的 Webmail 客户端可以继续通过 Cloudflare Tunnel,但 SMTP 25/587 直接连接服务器公网 IP。
## 当前边界
这是第一版服务端:已经具备收信、发信和客户端 API,但还没有实现 IMAP/POP3、多用户、DKIM 签名、DMARC 报告、反垃圾、配额和管理后台。未来客户端应通过 REST API 或后续增加的 IMAP 服务访问邮箱。
不要把它配置成 Open Relay。正式公网使用前,应配置 `mail.wpyw.site` 的 TLS 证书、PTR 反向解析、SPF、DKIM、DMARC,并优先考虑 SMTP 中继以提高投递率。
当前没有监听 993/995,因此暂时不要把它当作 Outlook/手机的 IMAP/POP3 服务器使用;第一版客户端应通过 REST API 连接。