🚫
编译报错退避三舍
老旧Node.js源码环境缺少Python与node-gyp,频繁报红
🔒
25端口永远不通
用阿里云腾讯云搭建,发现厂商永久封锁SMTP入站
⚠️
端口冲突服务死掉
自带的 Postfix 抢占端口,Docker 怎么都起不来
方案对比为什么强烈推荐 Docker 容器化?
| 评测指标 | 宿主机直接编译源码 | Docker 容器极速方案 |
|---|---|---|
| 安装成功率 | ✕ 极易出现底层依赖缺失报错 | ✔ 100% 官方环境封装立跑 |
| 服务器清洁度 | ✕ 残留上百个孤儿 npm 模块 | ✔ 纯沙箱隔离,删容器即干干净净 |
| 后期迁移与重构 | ✕ 换机器需重装全部 Node 编译环境 | ✔ 一条命令或 Compose 5秒完成迁移 |
核心前提 · 避坑第一原则
没有开放「入站 25 端口 (SMTP)」的服务器,请勿继续操作!
接收全球外网投递的邮件,物理上必须依靠 25 端口。腾讯云、阿里云等国内厂商默认永久阻断入站与出站 25 端口,且不支持个人解封。
步骤 01
配置域名 DNS 解析记录(生死攸关的一步)
★ 核心技巧:Cloudflare 必须关闭小黄云代理
假设你的主域名为 yourdomain.com,计划搭建的邮箱后缀为 @mail.yourdomain.com。前往你的 DNS 控制台添加以下两条记录:
| 类型 (Type) | 主机名 (Name) | 记录值 (Value) | 优先级 (Priority) | 代理状态 (Cloudflare) |
|---|---|---|---|---|
| A 记录 | mail |
你的VPS公网IP |
- | 仅限 DNS (关闭代理) |
| MX 记录 | mail |
mail.yourdomain.com |
10 | - |
步骤 02
检查并清理 25 端口占用(排错避坑)
★ 90% 用户无法接收信件皆因 Postfix 冲突
在宝塔左侧菜单点击「终端」,输入以下命令彻底释放 25 端口:
bash - 释放25端口
# 1. 检查当前 25 端口是否被 postfix 或 master 抢占
lsof -i:25
# 2. 彻底关闭并禁用系统默认邮件服务
systemctl stop postfix
systemctl disable postfix
# 3. 再次确认端口已完全释放(无任何输出即表示完全空闲)
lsof -i:25
步骤 03
启动 Docker 容器(双方案极速拉起)
【推荐】方案 A:宝塔终端一键命令行启动
bash - Docker Run 单行拉取启动
docker run -d \
--name forsaken-mail \
--restart always \
-p 25:25 \
-p 3000:3000 \
denghongcai/forsaken-mail
方案 B:宝塔可视化 Docker 控制台创建
📦 宝塔面板「Docker」➔「添加容器」配置参数对应表
镜像名称:
denghongcai/forsaken-mail
容器名称:
forsaken-mail
端口映射:
25 ➔ 25 (TCP) 与 3000 ➔ 3000 (TCP)
重启策略:
always (总是重启)
步骤 04
宝塔建站、SSL 加密与 Nginx 反向代理
- 添加站点: 宝塔左侧「网站」➔「添加站点」,域名输入
mail.yourdomain.com,类型选择 PHP纯静态。 - 配置 SSL: 点击站点名 ➔「SSL」选项 ➔ 一键申请 Let's Encrypt 证书并勾选 强制 HTTPS。
- 设置反向代理: 点击站点名 ➔「反向代理」➔「添加反向代理」:
🌐 宝塔反向代理核心参数填写
代理名称:
forsaken
目标 URL:
http://127.0.0.1:3000
发送域名:
$host
常见排错高频问题与实战诊断手册
问网页能顺利打开,但无论怎么发信都收不到邮件?
答
请依序进行三步彻底排查:
1. 检查 VPS 云控制台安全组: 确保入方向规则已放行
2. 宝塔安全防火墙: 检查宝塔系统防火墙是否放行了
3. 本地 Telnet 测活: 本地终端输入
1. 检查 VPS 云控制台安全组: 确保入方向规则已放行
TCP 25 端口。2. 宝塔安全防火墙: 检查宝塔系统防火墙是否放行了
25 端口。3. 本地 Telnet 测活: 本地终端输入
telnet 你的IP 25。若无法建立连接,证明当前云厂商对该 IP 实施了物理阻断。
问页面右下角频繁闪烁并提示 WebSocket 断开连接?
答
进入宝塔该站点的反代配置文件,确保已包含升级长连接协议参数:
若开启了 Cloudflare 代理,需在 CF 控制台的「Network」设置中开启 WebSockets 开关。
proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";若开启了 Cloudflare 代理,需在 CF 控制台的「Network」设置中开启 WebSockets 开关。