如何使用 Docker 和 Mailu 搭建个人/企业邮箱

基于Docker的Mailu邮件服务器安装配置详解

Mailu是一款简单而功能齐全的开源邮件服务器,通过一套Docker镜像来组织服务。它具有易于设置、易于维护、功能丰富等优点,是个人或企业搭建自己域名邮箱的理想选择。本文将详细介绍Mailu的安装配置过程。

系统环境要求

由于Mailu基于Docker,因此几乎可以在任何版本的Linux发行版上安装使用。安装前,请确保满足以下条件:

  • 一台具有至少2GB内存的服务器
  • 独立IP地址[1]
  • 开放的25端口(可通过telnet测试)
  • 已注册的域名
  • 基本的Linux操作知识

检测25端口是否开放

telnet smtp.aol.com 25

如果端口开放,将看到类似以下回显:

Trying 74.6.141.50...
Connected to smtp.aol.g03.yahoodns.net.
Escape character is '^]'.
220 smtp.mail.yahoo.com ESMTP ready

如果显示超时,说明25端口不开放,需向主机商申请开放或更换VPS[1]。

设置主机名与DNS

设置主机名

主机名设置是邮件服务器必不可少的一步。假设您的域名为example.com建议将邮件服务器主机名设置为mx.example.com[1]。

sudo hostnamectl set-hostname mx.example.com

设置后,使用以下命令验证:

hostname
hostname -f

应分别显示"mx"和"mx.example.com"[1]。

DNS设置

假设您的服务器IP为88.88.88.88,需添加以下DNS记录[1]:

  1. 为域名example.com设置任意一条A记录
  2. 为mx.example.com设置A记录,解析到88.88.88.88
  3. 为example.com设置MX记录,优先级为10,解析值为mx.example.com
  4. SPF记录:为example.com设置TXT记录,值为"v=spf1 mx ~all"
  5. DMARC记录:为_dmarc.example.com设置TXT记录,值为"v=DMARC1; p=none; pct=100; rua=mailto:[email protected]"

另外,需要通过VPS服务商设置rDNS(反向DNS)记录,将IP解析到主机名[1]。

安装Docker与Docker Compose

Docker安装

apt-get update && apt-get upgrade
apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
apt-get update
apt-get install docker-ce docker-ce-cli containerd.io

Docker Compose安装

curl -L "https://github.com/docker/compose/releases/download/1.28.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

配置防火墙

使用ufw配置防火墙,开放必要端口[7]:

sudo ufw allow "OpenSSH"
sudo ufw allow "Nginx Full"
sudo ufw allow "Mail submission"
sudo ufw allow "SMTP"
sudo ufw allow "POP3"
sudo ufw allow "POP3S"
sudo ufw allow "IMAP"
sudo ufw allow "IMAPS"
sudo ufw allow 465/tcp
sudo ufw allow 587/tcp
sudo ufw enable

获取Mailu配置

Mailu提供了自动生成配置的网站:https://setup.mailu.io[2]

配置步骤

  1. 第一步:选择最新版本(如2.0)和Docker系统[2]
  2. 第二步:配置域名、后台链接等信息[2]
    • 填写主要邮箱域名
    • 填写链接的网站URL
    • 勾选"Enable the admin UI"
  3. 第三步:选择网页邮箱模板(如roundcube或rainloop)、防病毒服务等[2]
  4. 第四步:配置主机IP和主机名[2]
  5. 最后一步:选择数据库(推荐用户量小的选择sqlite)[2]

完成配置后,系统会生成docker-compose.yml和mailu.env配置文件[3]。

安装与启动Mailu

将配置文件下载后,创建目录并上传到服务器:

mkdir /home/Mailu
cd /home/Mailu

将docker-compose.yml和mailu.env上传到此目录[3]。

自定义mailu.env配置

打开mailu.env文件进行编辑,一些重要配置项说明:

# 邮件服务器域名
DOMAIN=example.com

# 管理界面URL
HOSTNAMES=mail.example.com

# 发送邮件的速率限制
MESSAGE_RATE_LIMIT=200/day

# 管理员账户设置
INITIAL_ADMIN_ACCOUNT=admin
INITIAL_ADMIN_DOMAIN=example.com
INITIAL_ADMIN_PW=yourpassword

# 允许从这些网络中继邮件(不需要认证)
RELAYNETS=192.168.0.0/24,172.16.0.0/12,10.0.0.0/8

# 如果需要通过外部SMTP服务器中继发送邮件
# RELAYHOST=smtp.external-provider.com
# RELAYUSER=username
# RELAYPASSWORD=password

启动Mailu

docker-compose pull  # 先拉取所有镜像
docker-compose up -d  # 后台启动服务

查看服务状态:

docker-compose ps

创建管理员账户

如果在mailu.env中没有设置初始管理员,可以手动创建:

docker-compose exec admin flask mailu admin 用户名 域名 密码

例如:

docker-compose exec admin flask mailu admin admin example.com yourStrongPassword123

配置DKIM和其他认证

DKIM配置

  1. 登录管理后台 (https://mail.example.com/admin)
  2. 进入"邮件域名"选项卡,选择您的域名
  3. 点击"DKIM密钥"右侧的"生成"按钮
  4. 系统会生成DKIM密钥和对应的DNS TXT记录
  5. 将生成的TXT记录添加到DNS配置中,一般格式为:
    dkim._domainkey.example.com. IN TXT "v=DKIM1; k=rsa; p=MII...long key..."
    

SPF记录验证

确认您已添加了正确的SPF记录:

example.com. IN TXT "v=spf1 mx a:mx.example.com ~all"

DMARC记录验证

确认您已添加了正确的DMARC记录:

_dmarc.example.com. IN TXT "v=DMARC1; p=none; pct=100; rua=mailto:[email protected]"

配置Mailu作为SMTP中继服务器

启用SMTP认证

Mailu默认配置已支持SMTP认证,但您需要确保以下几点:

  1. 修改mailu.env文件,确保包含以下设置:

    # 允许的网络(可以不需要认证直接中继邮件)
    RELAYNETS=192.168.0.0/24,10.0.0.0/8
    
    # 启用SMTP认证
    ENABLE_SMTP_AUTH=True
    
  2. 创建自定义的Postfix配置(如需要):

    mkdir -p /home/Mailu/overrides/postfix
    

    创建文件 /home/Mailu/overrides/postfix/main.cf.extra

    # 启用SASL认证
    smtpd_sasl_auth_enable = yes
    smtpd_sasl_security_options = noanonymous
    smtpd_sasl_local_domain = $myhostname
    
    # 中继限制
    smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
    
  3. 在docker-compose.yml中添加配置文件映射:

    smtp:
      volumes:
        - ./overrides/postfix/main.cf.extra:/etc/postfix/main.cf.extra:ro
    
  4. 重启服务使配置生效:

    docker-compose down
    docker-compose up -d
    

SMTP端口说明

Mailu支持多个SMTP端口,各有不同用途:

  • 25端口:标准SMTP端口,用于服务器间通信
  • 465端口:加密SMTP (SMTPS),使用SSL/TLS加密,支持认证
  • 587端口:邮件提交端口,使用STARTTLS加密,支持认证

对于配置邮件客户端,推荐使用:

  • 端口465(SSL/TLS加密)
  • 端口587(STARTTLS加密)

测试SMTP中继功能

  1. 使用telnet或openssl测试连接:

    # 测试端口465(SSL)
    openssl s_client -connect mx.example.com:465
    
    # 或测试端口587(STARTTLS)
    openssl s_client -starttls smtp -connect mx.example.com:587
    
  2. 进行SMTP认证测试:

    连接后,输入以下命令:

    EHLO localhost
    AUTH LOGIN
    (输入Base64编码的用户名)
    (输入Base64编码的密码)
    

    或者使用swaks工具进行完整测试:

    swaks --server mx.example.com --port 465 --tls --auth-user [email protected] --auth-password yourpassword --to [email protected] --from [email protected]
    

配置邮件客户端

以下是在各种邮件客户端中配置Mailu的方法:

Outlook配置

  1. 账户类型选择"POP或IMAP"
  2. 邮箱地址:您的邮箱地址(如[email protected]
  3. 服务器设置:
  4. 认证方式:正常密码(不要选用OAuth2)

Thunderbird配置

  1. 添加新账户,选择"手动配置"
  2. 填写服务器信息:
  3. 用户名使用完整邮箱地址

移动设备配置

iOS设备:

  1. 进入"设置" → “邮件” → “账户” → “添加账户” → “其他”
  2. 选择"添加邮件账户"
  3. 填写姓名、电子邮件、密码
  4. 选择IMAP,填写服务器信息

Android设备:

  1. 打开Gmail或其他邮件应用
  2. 添加新账户,选择"其他"或"个人(IMAP/POP)"
  3. 输入邮箱地址和密码
  4. 选择账户类型为IMAP
  5. 填写服务器设置:

备份与维护

数据备份

Mailu的数据主要存储在Docker volume中,建议定期备份:

# 创建备份目录
mkdir -p /backup/mailu

# 备份配置文件
cp /home/Mailu/docker-compose.yml /backup/mailu/
cp /home/Mailu/mailu.env /backup/mailu/

# 备份数据卷
docker run --rm -v mailu_mail-data:/data -v /backup/mailu:/backup alpine tar czf /backup/mail-data-$(date +%Y%m%d).tar.gz /data

创建自动备份脚本 /home/Mailu/backup.sh

#!/bin/bash
BACKUP_DIR="/backup/mailu"
DATE=$(date +%Y%m%d)

# 创建备份目录
mkdir -p $BACKUP_DIR

# 备份配置文件
cp /home/Mailu/docker-compose.yml $BACKUP_DIR/
cp /home/Mailu/mailu.env $BACKUP_DIR/

# 备份数据卷
docker run --rm -v mailu_mail-data:/data -v $BACKUP_DIR:/backup alpine tar czf /backup/mail-data-$DATE.tar.gz /data

# 删除7天前的备份
find $BACKUP_DIR -name "mail-data-*.tar.gz" -mtime +7 -delete

添加执行权限并添加到crontab:

chmod +x /home/Mailu/backup.sh
crontab -e

添加每日凌晨3点执行备份:

0 3 * * * /home/Mailu/backup.sh

日志查看与分析

查看各服务的日志:

# 查看所有日志
docker-compose logs

# 查看特定服务的日志
docker-compose logs smtp
docker-compose logs imap
docker-compose logs front

# 实时查看日志
docker-compose logs -f smtp

系统更新

定期更新Mailu到最新版本:

# 进入Mailu目录
cd /home/Mailu

# 备份当前配置
cp docker-compose.yml docker-compose.yml.bak
cp mailu.env mailu.env.bak

# 拉取最新镜像
docker-compose pull

# 重启服务
docker-compose down
docker-compose up -d

高级配置与问题排查

增加额外域名和别名

  1. 登录管理界面
  2. 点击"邮件域名" → “添加域名”
  3. 输入新域名并保存
  4. 为新域名配置DNS记录(MX、SPF、DKIM等)
  5. 在"用户" → "别名"中添加邮箱别名

配置邮件过滤规则

  1. 登录管理界面
  2. 点击"过滤器" → “添加过滤器”
  3. 设置过滤规则,例如根据发件人、主题或内容进行过滤
  4. 选择操作(如标记为垃圾邮件、丢弃或转发)

常见问题排查

1. 无法接收外部邮件

可能原因与解决方案:

  • 检查25端口是否开放:telnet mx.example.com 25
  • 检查MX记录是否正确设置:dig MX example.com
  • 检查防火墙设置:sudo ufw status
  • 查看SMTP日志:docker-compose logs smtp

2. 邮件被标记为垃圾邮件

改善邮件信誉的方法:

  • 确保SPF、DKIM、DMARC记录正确设置
  • 确保rDNS记录(PTR)正确设置
  • 使用mail-tester.com测试并根据评分调整
  • 增加IP预热过程,逐步增加发送量
  • 确保您不在任何黑名单中:使用mxtoolbox.com检查

3. SMTP认证失败

排查步骤:

  • 检查用户名是否使用完整邮箱地址
  • 确认密码是否正确
  • 查看auth.log日志:docker-compose logs admin
  • 检查端口和加密设置是否匹配
  • 测试端口连通性:telnet mx.example.com 587

mailu这个邮局项目正确的smtp服务的配置

SMTP Server:mx.yourdomin.com(邮件服务器)
Port:465
Security:TLS
Username:一个你创建的随意的账户
Password:账户的登录密码
From email address:同一个你创建的随意的账户