TempMail.cc - 用 AI 重构了一下

TempMail.cc 是什么时候上线的我都忘了,应该是有好几年了。以前是用的 forsaken-mail,通过 docker 部署的,简单地修改了一下前端就上线了。

为什么重构

感谢 AI,一直就想重构了,但是没这个能力,简单修改一下 html、css 之类的还行,再修改别的就不行了。

开始的时候只修改、美化了一下前端,后来觉得闲着也是闲着就让 Workbuddy 帮忙重构了一下。就结果而言,目前我是很满意的。

目前结构

目录结构现在长这样:

src/
├── server.js          入口:http + express + socket.io + smtp
├── config.js          环境变量驱动的配置
├── lib/id.js          信箱名生成与校验(allowlist)
├── smtp/gateway.js    入站 SMTP 收信
├── realtime/inbox.js  信箱 → WebSocket 连接的注册与广播
└── web/app.js         静态托管 + 安全响应头 + 错误码

每个文件职责单一,全部 ES Module,Node 20+。

后端只有 4 个运行时依赖:

express(静态托管 + 健康检查)
smtp-server(入站 SMTP 服务器)
mailparser(解析邮件)
socket.io(实时推送)

Docker 部署

Docker 部署也比较简单:

  1. Clone 项目到服务器:git clone https://github.com/steley/tempmail /var/www/tempmail。
  2. 进入文件夹运行 docker build -t tempmail . 构建镜像。
  3. 运行 docker run -d --name tempmail -p 25:25 -p 3000:3000 --memory 256m --pids-limit 100 --restart unless-stopped tempmail 启动容器。
  4. 运行 curl localhost:3000/healthz 检查容器健康状态。

又让 Workbuddy 写了个 deploy.sh,方便更新。

#!/bin/sh
# tempmail update script — put at /root/deploy.sh on the server, chmod +x, run: ./deploy.sh
set -e

cd /var/www/tempmail   # repo directory; adjust if different

echo "==> git pull"
git pull --ff-only

echo "==> docker build"
docker build -t tempmail .

echo "==> recreate container"
docker stop tempmail 2>/dev/null || true
docker rm tempmail 2>/dev/null || true
docker run -d --name tempmail \
  -p 25:25 -p 3000:3000 \
  --memory 256m --pids-limit 100 \
  --restart unless-stopped \
  tempmail

echo "==> waiting for healthz"
i=0
until curl -fsS http://127.0.0.1:3000/healthz >/dev/null 2>&1; do
  i=$((i+1))
  if [ "$i" -ge 15 ]; then
    echo "FAILED: healthz not ready — check logs: docker logs tempmail"
    exit 1
  fi
  sleep 1
done
echo "OK: service is up (container: $(docker ps -qf name=tempmail))"
echo "Reminder: frontend JS changed — purge Cloudflare cache or hard-refresh."

GitHub 地址

https://github.com/httpsmail/tempmail

最后

感谢 AI,感谢 Workbuddy。