📌 第四部分:客户端收邮件与客户端收发测试
📥 客户端如何收取邮件?
用户通过邮件客户端(如 Outlook、Thunderbird、手机自带邮箱等)收取邮件时,其实是通过 IMAP 或 POP3 协议,去连接自己的邮件服务器并获取邮件副本。
整个过程的基本步骤如下:
- 用户在客户端中添加邮箱账号,填写服务器地址、端口和账号密码
- 客户端通过 IMAPS(加密的 IMAP)或 POP3S 协议连接服务器
- 验证身份后,客户端拉取服务器上的邮件列表或下载邮件
- 用户可浏览、标记、回复、删除邮件,操作同步到服务器(IMAP 模式)
🔧 大致配置流程
要让客户端正常收信,邮件服务器需要完成以下准备:
- ✅ 启用并配置 Dovecot(常用的邮件接收服务)
- ✅ 开启 IMAPS(端口 993)或 POP3S(端口 995)支持
- ✅ 配置 SSL/TLS 证书,确保收信过程加密安全
- ✅ 创建本地或虚拟邮箱用户,设置收信目录(即前文中的example用户,也可以使用useradd命令添加一个邮件专用账号)
- ✅ 放行防火墙端口,允许外部客户端访问
配置完成后,用户就可以通过任何支持标准协议的客户端安全接收邮件了。
本章用Dovecot来提供IMAPS服务,所以先简单的了解以下IMAPS。
什么是IMAPS?
IMAPS(Internet Message Access Protocol Secure) 是通过端口993使用SSL/TLS加密的IMAP协议,用于安全地从邮件服务器同步收件箱邮件到客户端。
IMAPS 的工作原理:
- 用户通过IMAP协议从服务器读取邮件(不会下载删除,除非特意设置)。
- IMAPS是客户端拉取邮件的安全方式。
- 邮件保留在服务器,支持多设备同步。
以上内容总结为一句话:IMAPS是“收邮件”的加密通道(993端口)。
要让客户端收取Postfix收到的邮件,实际上需要配置IMAP或POP3服务来接收邮件,而Postfix本身只负责发送邮件。通常你可以用Dovecot来提供IMAP/POP3服务。以下是简单的步骤来实现这个配置:
配置Dovecot
安装Dovecot
$ sudo dnf install dovecot
修改/etc/dovecot/conf.d/10-master.conf
service imap-login {
inet_listener imap {
port = 0
}
inet_listener imaps {
port = 993 #监听993端口
ssl = yes #强制SSL
}
}
service pop3-login {
inet_listener pop3 {
port = 0
}
inet_listener pop3s {
port = 0
ssl = yes
}
}
service submission-login {
inet_listener submission {
port = 0
}
}
配置Dovecot使用SSL,编辑/etc/dovecot/conf.d/10-ssl.conf
ssl = required
ssl_cert = </etc/letencrypt/live/mail.example.com/fullchain.pem
ssl_key = </etc/letencrypt/live/mail.example.com/privkey.pem
ssl_cipher_list = HIGH:!aNULL:!MD5
启动dovecot服务
$ sudo systemctl enable --now dovecot
放行993端口的流量
$ sudo firewall-cmd --permanent --add-port=993/tcp
$ sudo firewall-cmd --reload
然后我们要让dovecot读取用户的邮件,修改/etc/dovecot/conf.d/10-mail.conf
mail_location = mbox:~/mail:INBOX=/var/spool/mail/%u
#mbox:~/mail表示dovecot会在用户的家目录下建立一个索引文件目录。INBOX=/var/spool/mail/%u即用户的inbox
mbox_write_locks = fcntl
mbox_dirty_syncs = yes
mbox_lazy_writes = yes
接下来为用户的INBOX配置恰当的Linux权限,如果不做这一步,你会发现日志显示:imap(xxx)<31873>: Error: fchown(/home/xxx/mail/.imap, group=12(mail)) failed: Operation not permitted (egid=1001(xxx), group based on /var/spool/mail/xxx – see http://wiki2.dovecot.org/Errors/ChgrpNoPerm)
$ sudo chmod 600 /var/mail/xxx #这里的xxx代表用户的邮箱,这个目录其实是/var/spool的软链接。
为什么要这样改呢?让我们来看一下官方文档:
This means that Dovecot tried to copy /var/mail/user
file’s group (mail) to the index file directory it was creating (/home/user/mail/.imap/INBOX
), but the process didn’t belong to the mail group, so it failed. This is important for preserving access permissions with Shared mailboxes. Group copying is done only when it actually changes the access permissions; for example with 0600 or 0666 mode the group doesn’t matter at all, but with 0660 or 0640 it does.
To solve this problem you can do only one of two things:
- If the group doesn’t actually matter, change the permissions so that the group isn’t copied (e.g.
chmod 0600 /var/mail/*
, see Mbox Mailbox Format). - Give the mail process access to the group (e.g.
mail_access_groups=mail
setting). However, this is dangerous. It allows users with shell access to read other users’ INBOXes.
我们来分析一下:
Dovecot试图将/var/mail/user
文件的所属用户组(通常是mail
)复制给它要创建的索引文件目录(比如 /home/user/mail/.imap/INBOX
)。但问题在于,Dovecot进程本身不属于mail
组,所以它没有权限这样做,因此操作失败。这是Dovecot的一个安全机制,用于在“共享邮箱”(Shared mailboxes)中保持权限一致性。比如多个用户共享一个邮箱时,需要统一的组权限。Dovecot只有在文件权限中“组”权限有意义时,才尝试复制组。
- 0660 / 0640:组成员有读写/读权限,组就变得重要了,Dovecot会尝试复制,从而可能失败。
- 0600 / 0666:只有owner有权限或权限全开放,组权限无意义,不会触发复制。
如果你的系统中没有共享邮箱等需求,组权限其实没必要存在。那么你可以将/var/mail/*
的权限设置为 0600
,这样Dovecot 就不会尝试复制组了,也就不会报错。这种方法简单安全,不会引起跨用户访问权限的问题,适合当前的使用场景(每个用户收自己的信,不共享)。
最后重启一下服务,就可以用客户端进行全面测试了。预祝各位测试顺利!
$ sudo systemctl restart dovecot
收发测试
Thunderbird 是由 Mozilla(火狐浏览器的开发者)推出的一款免费开源的跨平台电子邮件客户端,支持 Windows、macOS 和 Linux 系统。
它的主要特点包括:
- ✉️ 支持 IMAP/POP3 收信 和 SMTP 发信
- 🔒 支持 SSL/TLS 加密通信 和邮件签名、加密
- 📁 支持多账户管理、邮件分类、标签和全文搜索
- 📅 内置日历和任务管理,可扩展为个人信息管理工具(PIM)
- 🧩 拥有丰富的扩展插件生态,可增强功能(如卡片式界面、邮件模板等)
🔧 常见用途
Thunderbird 常被用于:
- 管理个人或企业邮箱
- 连接私有邮件服务器进行测试与收发
- 跨平台同步邮件、通讯录和日历
它是许多 Linux 用户首选的图形化邮件客户端,也适合用于调试 SMTP/IMAP 配置。
按照下面的信息来配置你的客户端,然后进行收发测试。
🔧 配置SMTP服务器
服务器名称:mail.example.com
端口:587
连接安全:STARTTLS
验证方式:普通密码
用户名:你的sasl
用户名
🔧 配置IMAPS服务器
服务器名称:mail.example.com
用户名:example
连接安全:SSL/TLS
验证方式:普通密码