2026 Listmonk 自建邮件营销平台:Docker 部署打造个人 Newsletter

2196 字
11 分钟
2026 Listmonk 自建邮件营销平台:Docker 部署打造个人 Newsletter

你想做一个技术博客的 Newsletter,定期给读者推送新文章?或者你的产品需要给用户发注册确认邮件、通知邮件?看看市面上的选择:Mailchimp 免费版只有 500 个联系人,超出后每月 13起步;SendGrid免费额度100/天,商业版13 起步;SendGrid 免费额度 100 封/天,商业版 19.95/月;Mautic 功能强大但基于 PHP+MySQL,部署臃肿、性能堪忧。

有没有一个轻量、快速、完全可控的邮件营销方案?

Listmonk 就是答案。它是一个用 Go 语言编写的开源邮件营销平台,GitHub 上 21.7k Star。整个应用只有一个二进制文件 + PostgreSQL 数据库,极致轻量。Docker 镜像只有十几 MB,支持百万级订阅者的邮件发送,还有漂亮的现代 Web 管理界面。


一、Listmonk vs 其他邮件营销方案#

对比项ListmonkMailchimpMauticSendy
语言Go商业闭源PHPPHP
价格免费开源免费 500 人,$13+/月免费开源一次性 $69
数据库PostgreSQL托管MySQLMySQL
Docker 部署✅ 一键✅ 可⚠️ 需自行构建
模板编辑器✅ 所见即所得❌ 纯 HTML
统计分析✅ 详细✅ 基础
API✅ RESTful✅ RESTful✅ RESTful✅ RESTful
自建可控✅ 完全可控✅ 完全可控✅ 完全可控
性能🚀 极快(单二进制)托管🐢 PHP 较重🐢 PHP 较重

简单结论:如果你要自建,Listmonk 是最轻量、最快速的选择。 Mailchimp 适合不想折腾的团队,Mautic 适合需要高级自动化营销的场景但吃资源,Sendy 是付费 PHP 方案但性能不如 Listmonk。


二、Docker Compose 部署#

Listmonk 需要 PostgreSQL 数据库,官方推荐用 Docker Compose 一键部署。

docker-compose.yml#

version: '3.8'
services:
db:
image: postgres:15-alpine
container_name: listmonk-db
restart: unless-stopped
environment:
- POSTGRES_PASSWORD=请改成强密码
- POSTGRES_USER=listmonk
- POSTGRES_DB=listmonk
volumes:
- ./listmonk_data/db:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U listmonk"]
interval: 10s
timeout: 5s
retries: 5
app:
image: listmonk/listmonk:latest
container_name: listmonk-app
restart: unless-stopped
ports:
- "9000:9000"
environment:
- TZ=Asia/Shanghai
volumes:
- ./listmonk_data/config.toml:/listmonk/config.toml
- ./listmonk_data/uploads:/listmonk/uploads
depends_on:
db:
condition: service_healthy

初始化配置#

在启动前,需要先初始化数据库和配置文件:

Terminal window
# 1. 创建数据目录
mkdir -p ./listmonk_data
# 2. 生成默认配置文件
docker compose run --rm app ./listmonk --new-config
cp config.toml ./listmonk_data/config.toml
# 3. 编辑配置文件,填入数据库连接信息和 SMTP 配置
vim ./listmonk_data/config.toml
# 4. 初始化数据库(创建表结构)
docker compose run --rm app ./listmonk --install
# 5. 创建管理员账号(按提示输入用户名、密码、邮箱)
docker compose run --rm app ./listmonk --upgrade
# 6. 启动服务
docker compose up -d

启动成功后,访问 http://你的服务器IP:9000 就能看到 Listmonk 的管理面板登录页了。默认管理员账号是你在初始化时设置的用户名和密码。


三、配置详解#

3.1 数据库配置#

config.toml 中的数据库连接部分:

[db]
host = "db"
port = 5432
user = "listmonk"
password = "你设置的数据库密码"
database = "listmonk"
ssl_mode = "disable"
max_open = 25
max_idle = 10
max_lifetime = "30m"

注意这里的 host 填的是 Docker Compose 中的服务名 db,而不是 localhost

3.2 SMTP 配置#

这是最关键的部分——配置邮件发送通道:

[smtp]
# 你可以配置多个 SMTP 池,用 enbaled 开关控制
[[smtp]]
enabled = true
host = "smtp.example.com"
port = 587
auth_protocol = "plain"
username = "your-smtp-username"
password = "your-smtp-password"
max_conns = 50
max_msg_retries = 2
idle_timeout = "30s"
wait_timeout = "5s"

常见的 SMTP 服务推荐:

SMTP 服务用途价格日均发送上限
阿里云邮件推送国内业务免费 2000 封/天2000
SendGrid海外业务免费 100 封/天100
Mailgun海外业务免费 1000 封/天1000
自建 Postfix完全可控免费取决于 ISP 限制
Amazon SES海外业务$0.10/千封可扩展

重要:国内 VPS 的 25 端口通常被封,建议用 587 端口(STARTTLS)或 465 端口(SSL)。推荐使用邮件推送服务商的 SMTP 接口,而非自建邮件服务器。

预算有限的话可以看伤心的云的香港/美国机——美国洛杉矶款 1核1G 才 18.88 元/月,跑 Listmonk 加配套容器绰绰有余;香港款大陆访问更快,免备案、支付宝付款、随开随用,先从小机器跑起来,流量大了再升级。

3.3 应用配置#

[app]
address = "0.0.0.0:9000"
admin_username = "admin"
admin_password = "你设置的管理员密码"
# 上传文件限制
max_file_size = 50_000_000 # 50MB
# 并发限制
concurrency = 100
# 允许上传的文件类型
allowed_upload_types = ["png", "jpg", "gif", "svg", "pdf", "txt"]
# 隐私与跟踪
[privacy]
# 是否启用打开跟踪
enable_open_tracking = true
# 是否启用点击跟踪
enable_click_tracking = true
# IP 地址匿名化
anonymize_ip = true

四、创建第一个 Newsletter#

4.1 导入订阅者#

在管理面板进入 SubscribersImport,支持 CSV 批量导入:

email,name,attributes
user1@example.com,张三,{"city": "北京"}
user2@example.com,李四,{"city": "上海"}

也可以通过 API 导入:

Terminal window
curl -X POST 'http://localhost:9000/api/subscribers' \
-u 'admin:你的密码' \
-H "Content-Type: application/json" \
-d '{
"email": "newuser@example.com",
"name": "王五",
"status": "confirmed"
}'

4.2 创建邮件列表#

在管理面板进入 ListsNew List,创建一个邮件列表(比如 “博客周报”)。

然后你可以把订阅者分配到不同的列表中,这样发 Campaign 时可以精确选择目标受众。

4.3 设计邮件模板#

Listmonk 内置了所见即所得的模板编辑器,也支持手写 Go 模板语法:

<html>
<head>
<title>{{ .Subject }}</title>
</head>
<body>
<h1>你好,{{ .Name }}!</h1>
<p>这是你的定制内容:</p>
<ul>
{{ range .Articles }}
<li><a href="{{ .URL }}">{{ .Title }}</a></li>
{{ end }}
</ul>
<hr>
<p style="color: #999; font-size: 12px;">
如果你不想再收到这些邮件,<a href="{{ .UnsubscribeURL }}">点击这里退订</a>
</p>
</body>
</html>

模板变量说明:

  • {{ .Subject }} — 邮件主题
  • {{ .Name }} — 订阅者姓名
  • {{ .Email }} — 订阅者邮箱
  • {{ .UnsubscribeURL }} — 退订链接
  • {{ .TrackViewURL }} — 打开跟踪像素

4.4 发送 Campaign#

进入 CampaignsNew Campaign

  1. 基本信息:填写标题、主题行、发件人名称和地址
  2. 选择列表:勾选目标邮件列表
  3. 选择模板:选择或编写邮件内容
  4. 安排发送:立即发送或定时发送

点击 Send Test 可以先给自己发一封测试邮件确认效果,然后点击 Send 正式发送。


五、统计分析#

Listmonk 提供了实时统计数据:

  • 发送总数:共发送了多少封
  • 打开率:多少人打开了邮件(需启用打开跟踪)
  • 点击率:多少人点击了邮件中的链接
  • 退订率:发送后有多少人退订
  • 失败率:发送失败的邮件数

数据在 Dashboard 上一目了然,也支持按 Campaign 查看详细数据。


六、搭配反向代理#

和前面系列的文章一样,建议用 CaddyNginx Proxy Manager 加一层 HTTPS:

newsletter.你的域名.com {
reverse_proxy app:9000
}

docker-compose.yml 中的网络配置:

services:
app:
# ... 配置同上
networks:
- internal
# 不需要对外暴露 9000 端口
caddy:
networks:
- internal
networks:
internal:
driver: bridge

FAQ#

Q: Listmonk 适合大规模发送吗? A: 完全可以。Listmonk 在性能测试中能轻松处理百万级订阅者的邮件发送。重要的是配置好 SMTP 池的并发数(max_conns),以及你 SMTP 服务商的上限。

Q: 需要 PostgreSQL 专业知识吗? A: 不需要。Docker Compose 会自动安装 PostgreSQL,初始化脚本会创建所需的表结构。日常使用完全不需要操作数据库。

Q: 发件成功率怎么样? A: 成功率取决于你使用的 SMTP 服务商。建议用专门的邮件推送服务(如 Amazon SES、SendGrid),而不是自建 Postfix(容易被标记为垃圾邮件)。

Q: 支持多语言模板吗? A: 支持。模板是纯 HTML 加上 Go 模板语法,你可以为不同语言创建不同的模板,在发送时根据用户属性选择合适的模板。

Q: 能不能导入现有的 Mailchimp 数据? A: 可以。Listmonk 支持 CSV 导入,你可以从 Mailchimp 导出订阅者 CSV,然后再导入到 Listmonk。API 也支持批量导入。

Q: 数据隐私有保障吗? A: 完全在你的服务器上,数据不经过任何第三方。你可以配置 IP 匿名化和禁用跟踪功能以保护用户隐私。

Q: 和前面文章讲的 Caddy 怎么配合? A: 非常简单。把 Caddy 加入同一个 Docker 网络,用域名指向 Listmonk 的 app:9000 即可。这样你就不需要对外暴露 9000 端口了。

延伸阅读#

  • Docker 换源避坑指南 — 部署前的必备准备
  • Nginx Proxy Manager 反代面板 — 统一管理所有服务的访问入口
  • Stirling PDF 自建 PDF 工具箱 — 30多种PDF处理工具合一

Listmonk 是目前自建邮件营销平台的最佳选择,Go 的单二进制部署让运维变得异常简单。今天的两篇文章分别覆盖了全文搜索和邮件营销两个实用场景,希望能给自建爱好者们一些新思路。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
2026 Listmonk 自建邮件营销平台:Docker 部署打造个人 Newsletter
https://www.kshare.top/posts/2026-listmonk-自建邮件营销平台docker-部署打造个人newsletter/
作者
Kshare
发布于
2026-06-22
许可协议
CC BY-NC-SA 4.0
相关文章 智能推荐
1
2026 Navidrome 自建音乐流媒体:Docker 部署打造个人音乐库
部署教程 你的网易云歌单里是不是躺着几百首灰色歌曲?周杰伦下架、Taylor Swift 下架、陈奕迅也陆续下架——这些年来流媒体平台的版权大战愈演愈烈,今天还能听的歌明天可能就变灰了。
2
2026 Meilisearch 自建全文搜索引擎:Docker 部署打造个人搜索服务
部署教程 你的网站需要一个站内搜索功能?Elasticsearch 功能强大但资源占用感人——光 JVM 堆内存就要吃掉 1GB 起步。用 Algolia 吧,免费版只有 10000 条记录,超了就得每月 $50 起。
3
2026 Prometheus 自建监控系统:Docker 部署实现服务器全方位监控
部署教程 Prometheus Docker 部署完整教程,从零搭建指标采集系统,涵盖 Node Exporter、告警规则配置,让低配 VPS 也能拥有专业级监控。
4
2026 Gitea 安装使用教程:Docker 部署自建 Git 仓库 + Actions CI/CD
部署教程 Gitea 安装使用教程:Go 写的轻量 Git 托管服务,内存占用不到 GitLab 的十分之一。本文覆盖 Docker 部署、Windows 独立版安装、Gitea Actions CI/CD 与 Runner 配置、反向代理 HTTPS,附常见问题。
5
2026 Vaultwarden 自建密码管理器:Docker 部署替代 Bitwarden 付费订阅
部署教程 浏览器自动填充确实方便,但 Chrome 的密码管理器本质上是个加密文件,换了浏览器或设备就得重新折腾。而且浏览器密码管理器的安全性一直是个问题——前几年谷歌就被曝出某些密码可以明文读取。
随机文章 随机推荐
Profile Image of the Author
Kshare
Hello, I'm Kshare.
重要公告
非常抱歉!本站此前接入的 Adsterra 广告联盟存在严重问题:其脚本会在访问者不知情的情况下强制跳转到第三方劫持页面(如 verify11.click 等恶意域名),严重影响了大家的访问体验与安全。我们已第一时间彻底移除了 Adsterra 的全部广告代码,并向因此受到困扰的访客致以最诚挚的歉意。目前站内仅保留安全的自营推广链接(无脚本、无弹窗、无跳转),其余广告投放保持关闭,感谢大家的理解与支持!
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
215
分类
9
标签
269
总字数
545,433
运行时长
0
最后活动
0 天前

文章目录