699 字
3 分钟
Docker部署Poste.io企业邮局
前言
很多企业都有自建邮局的需求,本篇介绍如何使用Docker部署开源的Poste.io
邮局系统。
需要占用的端口
80 - HTTP(用于 web 界面和未加密的邮件服务)
443 - HTTPS(用于加密的 web 界面和邮件服务)
25 - SMTP(用于发送邮件)
587 - SMTP(用于加密的邮件发送)
993 - IMAP(用于加密的 IMAP 邮件接收)
995 - POP3(用于加密的 POP3 邮件接收)
110 - POP3(用于未加密的 POP3 邮件接收)
143 - IMAP(用于未加密的 IMAP 邮件接收)
1:检查25端口是否能通
apt update && apt install telnet -y
telnet smtp.gmail.com 25
- 如果显示下面的信息就代表是通的
Connected to smtp.gmail.com.
Escape character is '^]'.
220 smtp.gmail.com ESMTP d2e1a72fcca58-71dd9d6e713sm17347b3a.23 - gsmtp
2:域名解析(以cloudflare为例)
类型 | 名称 | 内容 | 代理状态 | TTL |
---|---|---|---|---|
A | 服务器IP | 仅 DNS | 自动 | |
CNAME | imap | mail.example.com | 仅 DNS | 自动 |
CNAME | pop | mail.example.com | 仅 DNS | 自动 |
CNAME | smtp | mail.example.com | 仅 DNS | 自动 |
MX | example.com | mail.example.com | 仅 DNS | 自动 |
TXT | example.com | v=spf1 mx ~all | 仅 DNS | 自动 |
TXT | s20241002362._domainkey | k=rsa; p=MIIBIjA…xXX | 仅 DNS | 自动 |
最后一条
TXT
记录需要部署完成后进面板查看名称和内容。替换
example.com
为你的域名
3:docker-compose.yaml
启动
services:
mailer:
image: analogic/poste.io
container_name: mailer
restart: always
hostname: mail.example.com # 容器内主机名替换你的域名
network_mode: host
environment:
- TZ=Asia/Shanghai # 时区设置
- DISABLE_CLAMAV=TRUE # 禁用 ClamAV
- DISABLE_RSPAMD=FALSE # 启用 Rspamd
- DISABLE_ROUNDCUBE=FALSE # 启用 Roundcube
volumes:
- ./mailer:/data
4:进入面板
mail.example.com
使用这个域名进入管理面板第一行默认,第二行设置管理员邮箱,例如:
admin@example.com
,第三行输入管理员密码,smtp密码也是这个左侧选择
系统设置
,然后上面找到TLS证书,然后申请证书。通用名默认,替代名称里把smtp
这些域名也填入进去,然后申请,查看下面的日志,申请完成后保存即可。然后左侧选择
虚拟域名
,然后点击域名,找到DKlM key
,然后点击钥匙按钮激活,然后域名解析TXT
类型的验证。然后用管理员邮箱登录,测试发邮件即可。
poste.io批量创建邮箱脚本
#!/bin/bash
# Poste.io 容器ID或名称
CONTAINER_ID="mailer"
# 邮箱的@后缀,也就是根域名
DOMAIN="example.com"
# 所有邮箱账户的统一密码
PASSWORD="admin123456"
# 如果域名不存在,则创建域名
echo "创建域名 $DOMAIN (如果不存在)"
docker exec $CONTAINER_ID poste domain:create $DOMAIN
# 创建邮箱账户
for i in {100..200}
do
EMAIL="$i@$DOMAIN"
echo "正在创建邮箱: $EMAIL"
docker exec $CONTAINER_ID poste email:create $EMAIL $PASSWORD
# 检查上一个命令的退出状态
if [ $? -eq 0 ]; then
echo "成功创建邮箱 $EMAIL"
else
echo "创建邮箱 $EMAIL 失败"
fi
# 可选:添加小延迟以避免对服务器造成过大压力
sleep 1
done
echo "邮箱创建过程完成。"