LanQin Email 是一个自建邮箱 Webmail 全栈方案:前端使用 React + TypeScript + shadcn/ui,后端使用 Go + SQLite,部署时可用单容器集成 API、Web、Nginx、Postfix、Dovecot、Rspamd。
交流群组:Telegram 群组
| Webmail 邮件阅读与列表 | 写邮件 · 富文本编辑工具栏 |
|---|---|
![]() |
![]() |
| 多邮箱切换、文件夹、搜索、标签、星标与邮件阅读面板。 | 富文本工具栏支持字体、标题、加粗、斜体、下划线、颜色、高亮、列表、对齐、引用、代码块、附件、表情与定时发送。 |
| 管理后台 · 系统概览 | 第三方客户端配置 |
![]() |
![]() |
| 管理用户、权限组、域名、邮箱、别名、系统设置与发送审计。 | 一键查看 IMAP / POP3 / SMTP 服务器、端口、安全方式与账号信息。 |
.
├── apps/api # Go API、SQLite schema、邮件同步与业务逻辑
├── apps/web # React/Vite Webmail 与管理后台
├── deploy # Docker Compose、镜像构建、Postfix/Dovecot/Rspamd 配置
└── .github/workflows # Docker 镜像发布流水线
公网收发邮件还需要正确配置 MX、SPF、DKIM、DMARC,并确认云厂商未封禁 SMTP 端口。
后端:
cd apps/api
go mod download
go test ./...
go run ./cmd/server
前端(新终端):
cd apps/web
corepack enable
corepack prepare pnpm@10.28.2 --activate
pnpm install
pnpm run dev
访问:
http://localhost:5173http://localhost:8080默认管理员邮箱为 admin@lanqin.local。建议开发时显式设置 LANQIN_ADMIN_PASSWORD;如果未设置,后端首次启动会随机生成密码并输出到日志。
服务器只需要 deploy/ 下的 Compose 文件和配置,不需要源码构建:
cd deploy
cp .env.example .env
# 修改 .env:域名、访问地址、管理员邮箱、管理员密码等
docker compose pull
docker compose up -d
常用命令:
# 查看日志
docker compose logs -f lanqin-email
# 更新镜像并重启
docker compose pull
docker compose up -d
# 停止服务
docker compose down
如需在完整源码仓库中本地构建镜像:
cd deploy
cp .env.example .env
docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --build
更多部署细节见 deploy/README.md。
deploy/.env:至少修改 LANQIN_PUBLIC_HOSTNAME、LANQIN_PUBLIC_BASE_URL、LANQIN_ADMIN_EMAIL、LANQIN_ADMIN_PASSWORD。LANQIN_TLS_CERT_FILE / LANQIN_TLS_KEY_FILE。完整配置见 deploy/.env.example。常用变量如下:
| 变量 | 说明 | 默认/示例 |
|---|---|---|
LANQIN_IMAGE |
all-in-one 镜像 | ghcr.io/lanqin996/lanqin-email:latest |
LANQIN_PUBLIC_HOSTNAME |
邮件服务器主机名,影响 Postfix/DNS 展示/链接 | mail.example.com |
LANQIN_PUBLIC_BASE_URL |
Webmail 对外访问地址 | https://mail.example.com |
LANQIN_ADMIN_EMAIL |
初始管理员邮箱 | admin@example.com |
LANQIN_ADMIN_PASSWORD |
初始管理员密码,生产必须修改 | ChangeMe123! |
LANQIN_DB_PATH |
SQLite 数据库路径 | /data/lanqin.db |
LANQIN_ALLOW_INSECURE_HTTP |
是否允许非 HTTPS Cookie,本地调试可开 | false |
LANQIN_OPEN_REGISTRATION |
是否开放注册 | false |
LANQIN_TWO_FACTOR_ENABLED |
2FA 功能总开关 | false |
LANQIN_TURNSTILE_ENABLED |
是否启用 Turnstile | false |
LANQIN_SMTP_HOST / LANQIN_SMTP_PORT |
Webmail 发信 SMTP | 127.0.0.1 / 25 |
LANQIN_MAILDIR_ROOT |
Maildir 根目录 | /var/mail/vhosts |
LANQIN_CATCH_ALL_ENABLED |
未注册收件地址是否进入全部邮件 | false |
LANQIN_USER_MAILBOX_APPLY_ENABLED |
是否允许用户自助申请邮箱 | false |
LANQIN_EXTERNAL_IMAP_ENABLED |
是否启用外部 IMAP 接入;也可在后台“系统设置 > 外部 IMAP”配置 | false |
LANQIN_EXTERNAL_IMAP_SECRET_KEY |
外部 IMAP 密码加密密钥,启用接入前必须设置;也可在后台配置 | 随机长字符串 |
LANQIN_EXTERNAL_IMAP_SYNC_SECONDS |
外部 IMAP 本地存储模式同步间隔;也可在后台配置 | 300 |
LANQIN_EXTERNAL_IMAP_ALLOW_PRIVATE_HOSTS |
是否允许外部 IMAP 连接内网/localhost 主机;也可在后台配置 | false |
LANQIN_EXTERNAL_IMAP_GMAIL_CLIENT_ID / LANQIN_EXTERNAL_IMAP_GMAIL_CLIENT_SECRET |
Gmail 外部 IMAP OAuth2,回调为 /api/external-imap-oauth/gmail/callback |
空 |
LANQIN_EXTERNAL_IMAP_OUTLOOK_CLIENT_ID / LANQIN_EXTERNAL_IMAP_OUTLOOK_CLIENT_SECRET |
Microsoft 365 / Outlook 外部 IMAP OAuth2,回调为 /api/external-imap-oauth/outlook/callback |
空 |
┌────────────────────────────────────────────────────────────┐
│ lanqin-email 单容器 │
│ │
│ ┌─────────┐ ┌────────────┐ ┌──────────────┐ │
│ │ Nginx │ ───▶ │ Go API │ ───▶ │ SQLite /data │ │
│ │ Web 静态│ │ Webmail API│ └──────┬───────┘ │
│ └─────────┘ └─────┬──────┘ │ │
│ │ Maildir sync │ maps │
│ ┌─────────┐ ┌─────▼──────┐ ┌──────▼───────┐ │
│ │ Rspamd │ ◀───▶ │ Postfix │ ───▶ │ Dovecot/LMTP │ │
│ │ DKIM/AS │ │ SMTP/MTA │ │ IMAP/POP3 │ │
│ └─────────┘ └────────────┘ └──────────────┘ │
└────────────────────────────────────────────────────────────┘
邮件流转:
LANQIN_SMTP_HOST 时不会真正投递外部收件人。LANQIN_PUBLIC_HOSTNAME 的证书。# API 测试
cd apps/api
go test ./...
# Web 检查与构建
cd apps/web
pnpm run check
# 单容器源码构建验证
cd deploy
docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --build
.env、SQLite 数据库、Maildir 与 DKIM 私钥。465/587 由 LanQin API 进程处理。LANQIN_TLS_CERT_FILE / LANQIN_TLS_KEY_FILE;API 不会用 localhost 自签证书对外提供 465/587。25 端口,用于公网入站邮件和内部/外部 relay。LANQIN_SMTP_HOST:LANQIN_SMTP_PORT,失败会记录审计并按退避策略重试。send_as_grants。Message-ID 去重。友情链接:LINUX DO —— 新的理想型社区
$ claude mcp add LanQin-Email \
-- python -m otcore.mcp_server <graph>