---
title: Docker部署Poste.io企业邮局
published: 2025-01-14
tags: [Docker,教程,邮局]
category: 教程
draft: false
---

### 前言

很多企业都有自建邮局的需求，本篇介绍如何使用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      | mail                | 服务器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 "邮箱创建过程完成。"
```

---
