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

2116 字
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 接口,而非自建邮件服务器。

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 端口了。

延伸阅读#


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
Profile Image of the Author
Kshare
Hello, I'm Kshare.
公告
站点已开启广告(类型:弹窗广告),给您带来的不便敬请谅解。如有更好的广告建议,欢迎发送邮件至 t9uzrz6u@anonaddy.me,感谢您的支持!
音乐
封面

音乐

暂未播放

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

文章目录