邮局系列教程 | 使用poste.io部署自己的邮局

1. 前言

Posteio 是一个轻量级的开源邮件服务器程序,旨在简化邮件系统的部署和管理。它支持常见的邮件协议(如 SMTP 和 IMAP),并具有内置的反垃圾邮件、反病毒功能,确保邮件通信的安全性和稳定性。Posteio 易于安装,支持 Docker 容器化部署,非常适合中小型企业和个人用户使用,既能够满足基本的邮件发送与接收需求,又能够通过扩展自定义功能来提升系统的灵活性。

官网:https://poste.io/

文档:Poste.io documentation

2. 准备

部署邮局必须使用25端口开放的服务器,并且夜梦强烈建议你使用支持rDNS的服务器。邮局服务器的准备工作可以看夜梦的这篇文章:邮局系列教程 | Racknerd开启rDNS(PTR反向解析) | 小白向教程

安装docker与docker-compose:【docker】在服务器上安装docker/docker-compose

部署邮局必须使用域名(域名邮箱没有域名那就不叫域名邮箱了)。夜梦推荐在 namesilo 上进行注册,注册时可以使用 1 美元优惠码:yemeng。

由于posteio占用内存较多(如果开启病毒监测和反垃圾邮件的话),夜梦建议你为服务器添加2~4G的swap:手动添加 SWAP

3. 域名解析

3.1 基础解析

在开始部署之前,建议先完成域名的解析。比如夜梦想要使用的域名邮箱后缀为@imoe.email,那么需要解析的内容如下表(将imoe.email、mail.imoe.email改成你自己的域名,将记录IP改成你服务器的IP):

名称记录类型记录值优先级/说明
@MXmail.imoe.email优先级 10,邮件服务器域名
mailA你服务器的 IP 地址邮件服务器 IP 地址
@TXTv=spf1 ip4:你的服务器 IP 地址 ~allSPF 记录,指定允许发送邮件的服务器
s66666666._domainkey.imoe.email.(具体看5.3节创建DKIM密钥)TXTv=DKIM1; k=rsa; p=MI...DKIM 公钥记录,确保邮件真实性
_dmarcTXTv=DMARC1; p=none; rua=mailto:dmarc@imoe.emailDMARC 记录,处理验证失败的邮件
selector1._domainkey (可选)CNAME指向你的 DKIM 公钥别名可选的 CNAME 记录,用于 DKIM

其中DKIM公钥需要在部署完posteio以后获取!具体看5.3节创建DKIM密钥。这些解析的具体解释如下:

3.1.1 MX 记录(Mail Exchange)

用于指定接收邮件的服务器。

名称记录类型记录值优先级
@MXmail.imoe.email10

mail.imoe.email 是你服务器的主机名,需确保该主机名解析到你的服务器 IP 地址。

3.1.2 A 记录

A 记录将主机名解析为服务器的 IP 地址。

名称记录类型记录值
mailA你服务器的 IP 地址

mail.imoe.email 指向你托管邮件服务器的 IP 地址。

3.1.3 TXT 记录

SPF、DKIM 和 DMARC 验证有助于确保你的邮件不会被标记为垃圾邮件。

SPF 记录

指定允许通过 imoe.email 域名发送邮件的服务器。

名称记录类型记录值
@TXTv=spf1 ip4:你的服务器 IP 地址 ~all

如果有多个服务器发送邮件,可以继续添加更多 IP 地址或子网范围。

DKIM 记录

DKIM 记录用于签署邮件,确保其未被篡改。

名称记录类型记录值
default._domainkeyTXT由你生成的 DKIM 公钥(Posteio 或其他邮件服务器生成的)

你需要在你的邮件服务器上生成 DKIM 密钥,并将公钥添加到 DNS 中。

DMARC 记录

DMARC 记录定义如何处理未通过 SPF 和 DKIM 验证的邮件。

名称记录类型记录值
_dmarcTXTv=DMARC1; p=none; rua=mailto:dmarc@imoe.email

3.1.4 CNAME 记录(可选)

夜梦这篇文章里面不做演示。如果你需要别名解析,比如为 DKIM 记录创建别名,可以使用 CNAME 记录。不过如果只是基本的邮件服务,不一定需要配置 CNAME 记录。

名称记录类型记录值
selector1._domainkey (DKIM 验证)CNAME你的 DKIM 公钥别名,若需要

3.2 协议解析(可选)

为了使用 IMAP、SMTP、POP 协议确保邮件的发送和接收,你需要在 DNS 中添加相应的 A 记录或 CNAME 记录,这样客户端才能正确连接到你的邮件服务器。这些记录通常会指向你的邮件服务器的主机名,例如 mail.imoe.email。以下是需要添加的 DNS 记录:

3.2.1 A 记录

这些记录将 IMAP、SMTP、POP 等子域名解析到你邮件服务器的 IP 地址。

名称记录类型记录值
imapA你服务器的 IP 地址
smtpA你服务器的 IP 地址
popA你服务器的 IP 地址

3.2.2 CNAME 记录

你也可以使用 CNAME 记录将 imapsmtppop 这些子域名解析为 mail.imoe.email,如果不想分别设置 A 记录。

名称记录类型记录值
imapCNAMEmail.imoe.email
smtpCNAMEmail.imoe.email
popCNAMEmail.imoe.email

3.2.3 服务端口配置(客户端)

  • IMAPimap.imoe.email,使用端口 143(非加密)或 993(SSL)。
  • SMTPsmtp.imoe.email,使用端口 25(非加密)、465(SSL)、587(STARTTLS)。
  • POPpop.imoe.email,使用端口 110(非加密)或 995(SSL)。

邮件服务器可以支持 IMAP、SMTP、POP 协议,客户端能够正确连接到服务器并处理邮件。

4. 部署

创建文件夹:

mkdir -p /root/data/docker_data/posteio
cd /root/data/docker_data/posteio

创建配置文件:

vim docker-compose.yml

英文输入法下按 i 进入编辑模式后,将下面的配置文件编辑好粘贴进去。配置文件中禁用反病毒功能(DISABLE_CLAMAV=TRUE)与禁用反垃圾邮件功能(DISABLE_RSPAMD=TRUE),可以大幅减低内存和CPU占用,请根据需求选择是否禁用。

version: '3.7'

services:
  mailserver:
    image: analogic/poste.io
    hostname: mail.imoe.email
    ports:
      - "25:25"
      - "110:110"
      - "143:143"
      - "587:587"
      - "993:993"
      - "995:995"
      - "4190:4190"
      - "465:465"
      - "80:80"      # 添加 80 端口,用于 Let's Encrypt 验证
      - "443:443"    # 启用 HTTPS
    environment:
      - LETSENCRYPT_EMAIL=admin@imoe.email
      - LETSENCRYPT_HOST=mail.imoe.email
      - VIRTUAL_HOST=mail.imoe.email
   #   - DISABLE_CLAMAV=TRUE    # 反病毒,根据需求禁用
   #   - DISABLE_RSPAMD=TRUE    # 反垃圾邮件,根据需求禁用
      - TZ=Asia/Shanghai
      - HTTPS=ON               # 启用 HTTPS
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./mail-data:/data      # 确保持久化数据卷

按 esc 后,输入:wq 保存退出。运行:

docker-compose up -d

然后就可以访问mail.imoe.emailmail.yourdomain.com)进入WEB界面了。

5. 使用

5.1 注册

访问web界面提示隐私错误不用管,直接进入即可。

注册管理员用户:

注册完就可以进入管理员界面了:

5.2 配置Let’s encrypt证书

配置Let’s encrypt证书:

对着输入,换成你自己的域名:

点击save changes保存。不出意外的话是不会出意外的,申请一切正常。

5.3 创建 DKIM 密钥

点击进入域名的配置页面:

点击创建DKIM密钥:

添加DNS解析,这里的解析就是3.1 基础解析的第四条:

5.4 webmail使用

点击右上角的webmail,登录用户名和登录密码和管理后台一致。

使用界面,简洁明了:

6. 问题记录

在发件时显示“你的 DKIM 签名无效”,夜梦还不清楚啥原因……知道的小伙伴可以和夜梦聊聊,感谢!

本文为夜梦星尘原创文章。
文章作者:夜梦星尘
文章链接:邮局系列教程 | 使用poste.io部署自己的邮局
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自夜梦星尘
支持作者:夜梦星尘的爱发电
上一篇