Go to file
smail 16df7affd0
Some checks are pending
Build and Release / build (amd64, darwin) (push) Blocked by required conditions
Build and Release / build (amd64, linux) (push) Blocked by required conditions
Build and Release / build (amd64, windows) (push) Blocked by required conditions
Build and Release / build (arm64, darwin) (push) Blocked by required conditions
Build and Release / build (arm64, linux) (push) Blocked by required conditions
Build and Release / build (arm64, windows) (push) Blocked by required conditions
Build and Release / security (push) Waiting to run
Security Checks / security (push) Waiting to run
ci: 重新触发正式发布流程构建v2.14.0
2026-10-18 18:13:08 +08:00
.gitea/workflows ci: 设置Release发布非草稿状态draft:false启用overwrite并完善发布说明 2026-10-18 16:58:03 +08:00
.github ci: 设置Release发布非草稿状态draft:false启用overwrite并完善发布说明 2026-10-18 16:58:03 +08:00
backend fix(hooks): 添加非Linux非Windows平台下的writeBundledPlugin实现以解决Darwin编译中断 2026-10-18 16:40:21 +08:00
deploy fix(package): 统一全平台发布包均包含deploy部署运维目录并同步测试与回执断言 2026-10-18 17:32:17 +08:00
docs docs: 增加文档白名单过滤规则并从版本库剥离内部验收与测试报告 2026-10-18 15:53:29 +08:00
frontend fix(frontend): 升级axios与vue并锁定source-map-js版本修复安全审计漏洞 2026-10-18 14:47:07 +08:00
plugins fix(plugins): 同步更新pmail_telegram_push的go.mod与go.sum依赖以解决全平台插件构建中断 2026-10-18 16:15:33 +08:00
test fix(package): 统一全平台发布包均包含deploy部署运维目录并同步测试与回执断言 2026-10-18 17:32:17 +08:00
.gitignore docs: 增加文档白名单过滤规则并从版本库剥离内部验收与测试报告 2026-10-18 15:53:29 +08:00
LICENSE Create LICENSE 2023-07-30 21:49:32 +08:00
Makefile 修复Go版本构建参数 2026-09-24 19:47:52 +08:00
README_CN.md docs: 将发布包与CICD工作流说明汉化为中文并对齐中英文档 2026-10-18 15:44:26 +08:00
README.md docs: 将发布包与CICD工作流说明汉化为中文并对齐中英文档 2026-10-18 15:44:26 +08:00

Smail

本项目基于 PMail 进行二次修改与深度开发。全面升级了企业级安全审计、单数据库统一架构、自适应响应式界面、现代化身份验证与自动化运维部署体验。

当前版本每套部署只使用一个数据库,SQLite、MySQL、PostgreSQL 三选一,配置历史与业务数据共用所选数据库,不再新建独立的 SQLite 状态库。生效配置保存在根目录 config 的五个 JSON 文件中;新部署的密钥和证书保存在 ssl,SQLite 文件及配置恢复事务日志保存在 data。请阅读 单数据库部署说明 和 运行目录迁移说明,升级前停服并完整备份;不能只复制配置文件,也不能沿用下文历史容器示例中仅挂载 config 的方式。

一台服务器、一个域名、一行代码、一分钟时间,你就能够搭建出一个自己的域名邮箱。

Smail是一个追求极简部署流程、极致资源占用的个人域名邮箱服务器。单文件运行,包含完整的收发邮件服务和Web端邮件管理功能。只需一台服务器、一个域名、一行代码、一分钟部署时间,你就能够搭建出一个自己的域名邮箱。

欢迎各类PR,无论你是修复bug、新增功能、修改翻译。另外,也为这个项目征集一个漂亮可爱的Logo!

项目优势与核心特性

1. 架构级单数据库统一管理(SQLite / MySQL / PostgreSQL 三选一)

  • 彻底消除原版分散的数据库机制,业务数据、配置历史与系统日志共用同一个选定数据库。
  • 既支持即开即用的本地嵌入式 SQLite,也原生支持高并发的 MySQL 8.x 与 PostgreSQL 14+,自由切换。

2. 极致资源占用与极速部署

  • 采用 Go 语言结合现代化 Vue 3 构建,后端直接静态内嵌打包全部前端资源。
  • 编译后单二进制文件自包含运行,启动极快,常规运行内存仅在 20MB 以内,特别适用于 1核512M 等高性价比轻量云主机。
  • 配套一键式自动化安装脚本(install-systemd.sh)与在线平滑更新脚本(update-systemd.sh),自动配置防火墙规则并开机自启。

3. 企业级安全审计与多因素认证 (2FA)

  • 支持 TOTP 动态验证码 与 Passkey / WebAuthn 通行密钥,提供工业级身份验证保障。
  • 具备超管本地 IPC 隔离重置通道、自动化防暴力破解保护、全库敏感凭据哈希加密存储。
  • 通过严格的代码安全性验证(全面通过 gosec 安全扫描与 govulncheck 漏洞检测),杜绝高并发内存竞态(Data Race)。

4. 满分邮件送达率信誉(10/10 评分)

  • 严格遵循现代邮件反垃圾标准,内置 DKIM 签名机制、SPF 匹配校验以及 DMARC 报告分析与对准策略。
  • 规范支持 List-Unsubscribe 标头,降低被主流邮件服务商(如 Gmail、QQ、网易等)拦截或标记为垃圾邮件的概率。
  • 具备可视化外部 SMTP 智能中继,配备独立启用开关与管理列表,即使服务器 25 端口受限也能顺畅发信。

5. 全自动 SSL 证书全生命周期管理

  • 深度集成 ACME 自动化协议,支持 HTTP-01 及主流 DNS API(阿里云 DNS、腾讯云 DNS 等)自动申请与续签 Let's Encrypt 证书。
  • 自动涵盖主域名与通配符泛域名,同时支持直接导入并热更新外部自定义证书。

6. 现代自适应 Web 管理与全功能工作台

  • 采用全新响应式双栏布局,自适应匹配桌面宽屏、平板与手机浏览器。
  • 内嵌免配置即时多语言翻译、富文本邮件编辑器、快速导出安全码以及多域名/多用户收发控制系统。

7. 全平台标准邮件客户端完全兼容

  • 完整实现标准的 POP3 (110/995)、SMTP (25/465/587) 与 IMAP (143/993) 协议。
  • 完美兼容各类主流客户端(Foxmail、Outlook、Thunderbird、Apple Mail 及各类手机自带邮件 App)。

如何部署与运维

0. 准备工作:检查服务器 IP 与域名信誉

自建邮件服务器需确保 IP 干净且 25 端口开放(发信服务器互联必需):

  1. 访问 Spamhaus IP 检查 确认服务器 IP 和域名没有历史被拉黑记录。
  2. 确保云服务器提供商已解封入站与出站 TCP 25 端口(若 25 端口被封锁,可在安装后启用 Smail 内置的外部 SMTP 智能中继功能)。

1. 下载发布包

前往 Releases 发布页面 或 GitHub Releases 下载对应系统的最新打包文件(例如 Smail_linux_amd64_V2.10.x.tar.gz)。

2. 生产环境自动化部署(Linux Systemd 推荐)

Smail 配备了一键式自动化生产环境管理脚本,支持解压即装、防火墙自动配置、权限隔离与系统服务纳管。

全新部署(一键安装与开机自启)

  1. 将下载的压缩包上传至目标目录并解压(安装路径将自动以解压所在目录为准,例如 /smail):
    mkdir -p /smail && tar -zxvf Smail_linux_amd64_V2.10.x.tar.gz -C /smail
    cd /smail/deploy
    sudo ./install-systemd.sh
    
  2. 脚本将自动执行以下完整流程:
    • 创建无特权的专属 smail 系统运行用户并收紧运行目录权限;
    • 自动检测并开放防火墙端口(80, 443, 25, 465, 587, 110, 995, 143, 993);
    • 注册系统服务 smail.service 并设置开机自启动;
    • 启动服务并实时监控输出初始化向导链接与初始日志,直到初始化就绪。

平滑版本更新(无需重配与清空数据)

后续发布新版本时,无需重复配置域名和清空数据库,直接使用更新脚本即可平滑升级:

# 在新版解压包的 deploy 目录下执行更新:
cd /path/to/new_smail/deploy
sudo ./update-systemd.sh
  • 脚本会自动检测现有环境的实际安装路径(如 /smail),将最新的程序二进制文件安全同步至安装路径;
  • 完整保留已配置的数据库、域名记录、证书与历史数据,重启服务后即可顺畅运行新版本。

3. 手动前台运行模式(开发 / 调试)

若需要在前台临时启动测试,可直接执行二进制:

./smail -p 80

说明:-p 参数指定初始化向导界面的 HTTP 端口(默认为 80 端口,若申请 Let's Encrypt 证书必须开放并使用 80 端口)。

4. 浏览器向导初始化

在浏览器中打开 http://<服务器公网IP> 或绑定的域名:

  1. 数据库配置:选择 SQLite(嵌入式单文件)、MySQL 8.x 或 PostgreSQL 14+,一键初始化数据库;
  2. 域名与管理员:设置主邮件域名(如 example.com)、Web 管理域名(如 mail.example.com)及超级管理员账号密码;
  3. SSL 证书:可选择 ACME 自动申请或手动导入证书;
  4. 初始化完成后系统自动就绪,即可登录后台开始使用。

5. 邮件送达率信誉检测(10/10 评分)

配置 DNS 的 SPF、DKIM 和 DMARC 记录后,建议通过权威邮件评分工具测试邮件送达得分:

  • Mail-Tester 评分测试
  • 根据评分报告提示补充 PTR 反向解析、DKIM 密钥或 SPF 声明,确保信誉满分直达收件箱。

配置文件说明

以下是旧版单文件配置示例,仅供迁移时识别字段,不能覆盖当前五分区配置。当前文件为 config/config.json、config/smtp.json、config/email.json、config/ssl.json 和 config/plugins.json;建议通过管理页面修改,系统会同步维护代次与摘要。

{
  "logLevel": "info", //日志输出级别
  "domain": "domain.com", // 你的域名
  "webDomain": "mail.domain.com", // web域名
  "dkimPrivateKeyPath": "config/dkim/dkim.priv", // dkim 私钥地址
  "sslType": "0", // ssl证书更新模式,0自动,HTTP模式,1手动、2自动,DNS模式
  "SSLPrivateKeyPath": "config/ssl/private.key", // ssl 证书地址
  "SSLPublicKeyPath": "config/ssl/public.crt", // ssl 证书地址
  "dbDSN": "./config/smail.db", // 数据库连接DSN
  "dbType": "sqlite", //数据库类型,支持sqlite 和 mysql
  "httpsEnabled": 0, // web后台是否启用https 0默认(启用),1启用,2不启用
  "spamFilterLevel": 0,// 垃圾邮件过滤级别,0不过滤、1 spf dkim 校验均失败时且无有效收件人过滤,2 spf校验不通过时且无有效收件人过滤 3,dkim 校验不过的时候且无有效收件人过滤
  "httpPort": 80, // http 端口 . 默认 80
  "httpsPort": 443, // https 端口 . 默认 443
  "isInit": true // 为false的时候会进入安装引导流程
}

第三方邮件客户端配置

POP3地址: pop.[你的域名]

POP3端口: 110/995(SSL)

SMTP地址: smtp.[你的域名]

SMTP端口: 25/465、587(SSL)

IMAP地址: imap.[Your Domain]

IMAP端口: 993(SSL)

插件

微信推送

垃圾邮件屏蔽

其他优秀开源插件

Telegram推送

插件安装

Important

插件已独立进程的方式运行在你的服务器上,请自行审查第三方插件的安全性。Smail目前仅维护上述三款插件

将插件二进制文件放到plugins文件夹中即可

参与开发

目录约定:独立测试代码和脚本位于 test/,测试日志及截图位于 test-log/,编译输出位于 out/。构建与开发启动方式见 文件目录整理说明,测试入口见 测试说明。

项目架构

1、前端: vue3+element-plus

前端代码位于 frontend 目录中,运行参考 frontend 目录中的 README 文件。

2、后端: golang + MySQL/SQLite

后端代码位于 backend/;推荐使用 deploy/build.ps1 构建后,通过 deploy/start-dev.ps1 启动开发服务。

3、编译项目

make build

4、单元测试

make test

后端接口文档

go to wiki

插件开发

go to wiki

自动化构建发布与 CI/CD 工作流

本项目在两个代码仓库中均维护了全自动化的构建与发布工作流:

支持全自动化多平台构建与发布包生成(自包含完整的前端与静态内嵌资源):

  • Linux: Smail_linux_amd64.tar.gz / Smail_linux_arm64.tar.gz
  • Windows: Smail_windows_amd64.zip / Smail_windows_arm64.zip
  • macOS: Smail_darwin_amd64.tar.gz / Smail_darwin_arm64.tar.gz