做技术博客或产品,想给订阅者发更新,又不想把邮箱列表交给第三方邮件服务?Listmonk 是一个开源的邮件订阅管理平台,自己掌控订阅者名单和发送通道,对标 Mailchimp 的自托管版本。本文在雨云 KVM 云服务器上把它跑起来,用于合规的自愿订阅通知。
一、为什么自己管订阅
第三方邮件营销平台往往按联系人数量收费,且订阅数据存在别人服务器上。Listmonk 把名单和发送都收回到你自己手里:
- 名单自管:订阅者数据在自己的数据库,不随平台涨跌价。
- 发送可控:通过 SMTP 或自有发信通道投递,脱离按封计费的绑定的。
- 开源免费:功能完整,包括分群、模板、发送统计。
合规提示:邮件订阅必须遵守《个人信息保护法》《互联网电子邮件服务管理办法》等规定。请采用双重确认订阅(double opt-in),仅向用户主动、自愿留资的邮箱发送,每封邮件提供清晰退订入口,绝不购买或爬取邮箱列表,绝不群发营销垃圾邮件。
二、准备工作
- 雨云 KVM 云服务器(1 核 1G 起),Debian 12,已装 Docker。
- 一个解析好的域名(管理后台与发信身份用)。
- 一个可用的 SMTP 发信账号(可以是云服务商提供的合规邮件通道)。
三、Docker 部署
新建 ~/listmonk/docker-compose.yml:
version: "3"
services:
listmonk:
image: listmonk/listmonk:latest
container_name: listmonk
ports:
- "9000:9000"
volumes:
- ./config.toml:/listmonk/config.toml
command: ["./listmonk", "--config", "/listmonk/config.toml"]
restart: unless-stopped
db:
image: postgres:15
environment:
POSTGRES_DB: listmonk
POSTGRES_USER: listmonk
POSTGRES_PASSWORD: 请改强密码
volumes:
- ./pgdata:/var/lib/postgresql/data
restart: unless-stopped
启动后访问 http://IP:9000,首次进入在「Settings → Database」里点初始化建表。发信在「Settings → Messaging」填 SMTP,建议先发测试信确认进箱而非垃圾箱。
四、订阅名单与发信
- 建名单(Lists):按主题分群,比如「博客更新」「产品动态」,用户可多选订阅。
- 双重确认:开启 opt-in 确认,用户填邮箱后要点确认链接才入名单,避免误填他人邮箱。
- 写模板发 Campaign:用 HTML 模板做 Newsletter,发送前可先发给自己预览;发送统计能看送达、打开、点击。
五、和推送联动
重要通知也可以走本站 12322 的 Gotify 推到手机,和邮件形成双通道:订阅类用邮件,运维告警用 Gotify,分工清晰。






