8.0 KiB
邮箱客户端配置指南(IMAP / POP3 / SMTP)
适用于 clover 三叶草邮局实例。示例使用
example.com,请替换成你自己的域名。 面板地址:https://<面板域名>(例如https://panel.example.com)
一、服务器参数(照抄)
| 用途 | 服务器 | 端口 | 加密方式 | 用户名 | 密码 |
|---|---|---|---|---|---|
| 收信 IMAP(推荐) | mail.<你的域名> 或服务器 IP |
993 | SSL/TLS | 完整邮箱地址 | 建邮箱时设的 |
| 收信 IMAP(备选) | 同上 | 143 | STARTTLS | 同上 | 同上 |
| 收信 POP3 | 同上 | 995 | SSL/TLS | 同上 | 同上 |
| 收信 POP3(备选) | 同上 | 110 | STARTTLS | 同上 | 同上 |
| 发信 SMTP(推荐) | 同上 | 587 | STARTTLS | 同上 | 同上 |
| 发信 SMTP(备选) | 同上 | 465 | SSL/TLS | 同上 | 同上 |
三条铁律:
- 用户名必须写完整邮箱地址(
boss@example.com),不是只写boss - 加密必须开,个人邮箱别用明文端口(143/110 不带加密时密码是明文的)
- 发信必须勾选「需要认证」,否则会被当开放中继
端口 25 不要用做客户端发信端口——那是服务器之间投递用的,客户端用 587。
WebMail(不想装客户端就用这个):浏览器打开 https://<面板域名>/webmail
(面板左侧「WebMail」页选邮箱可免密直达;直接打开这个网址则用邮箱地址+密码登录)
二、各客户端具体步骤
Thunderbird(Windows / macOS / Linux)
- 账户设置 → 新建账户 → 电子邮件
- 填姓名 / 邮箱地址 / 密码 → 点「手动配置」(别让向导自己猜)
- 按上表填:
- 收件:IMAP,
mail.<域名>,993,SSL/TLS - 发件:
mail.<域名>,587,STARTTLS,认证方式「普通密码」 - 用户名两处都填完整邮箱地址
- 收件:IMAP,
- 点「重新测试」→ 两边都显示成功后「完成」
- 若提示证书不受信任:勾选「永久信任此证书」→ 确认(自签证书,见第四节)
iPhone / iPad(iOS「邮件」App)
设置 → 邮件 → 账户 → 添加账户 → 其他 → 添加邮件账户
- 收件服务器:IMAP,主机名
mail.<域名>,用户名 = 完整邮箱,密码 - 发件服务器:主机名
mail.<域名>,用户名/密码同上 - 保存后进「账户 → 高级」确认:收件用 993 + SSL,发件用 587 + STARTTLS(iOS 有时会自动选错端口,务必核对)
- 弹证书警告 → 「详细信息 → 信任」(自签证书)
Android(系统「电子邮件」/ Gmail App 的「其他」)
手动设置 → IMAP:
- 收件:
mail.<域名>/993/ SSL/TLS - 发件:
mail.<域名>/587/ STARTTLS / 需要登录 - 用户名 = 完整邮箱地址
Outlook(Windows / Mac / 移动端)
文件 → 添加账户 → 手动设置 → POP 或 IMAP
- 若坚持用 POP3:收件
995SSL,发件587STARTTLS,勾选「在服务器上保留邮件副本」(否则手机拉走就没了) - 建议改用 IMAP(多设备同步)
Apple Mail(macOS)
系统设置 → 互联网账户 → 添加其他账户 → 邮件 → 填账号密码 → 手动填上面参数
三、POP3 还是 IMAP?
| IMAP(推荐) | POP3 | |
|---|---|---|
| 多设备同步 | ✅ 服务器保存,各端看到同一份 | ❌ 默认下载到本地并删除服务器副本 |
| 已读/文件夹/标记 | ✅ 同步 | ❌ 只有收件箱概念 |
| 服务器占用 | 配额内一直占 | 拉走即释放(省空间) |
结论:手机+电脑都用 → 用 IMAP。只有一台设备且想省服务器空间 → 用 POP3(务必勾「保留副本」免得误删)。
POP3 和 ManageSieve 监听器由 .env 中的 ENABLE_POP3=1、ENABLE_MANAGESIEVE=1 启动(示例配置默认启用)。IMAP、POP3、ManageSieve 和 SMTP 的账号访问开关集中在「邮箱账户 → 全局邮箱设置」中,默认全部启用;关闭 IMAP 会同时关闭Roundcube。
四、证书这件事(首次连接必看)
全新安装默认使用自签证书(安装器自动生成,CN = mail.<主域>)。所以:
- 客户端首次连接会报「证书不受信任 / 无法验证服务器身份」
- Thunderbird:勾「永久信任」;iOS:进「详细信息 → 信任」;Android:选「继续/接受」
- 不影响加密(连接仍是 TLS 加密的),只影响证书链验证
想彻底消除警告:登录面板,打开「面板设置 → TLS 证书」,在「邮件服务证书」卡片点击「签发 / 检查续期」。邮件主机名的 A 记录需指向本机,公网 TCP 80 可达,Cloudflare 代理需暂时关闭。签发成功后证书会安装到 DMS,并由证书助手自动续期;续期时邮件服务会短暂重启。
五、限制与已知问题
| 项 | 值 / 状态 |
|---|---|
| DMS 单封邮件大小上限 | 按「全局邮箱设置」中的附件总量自动设置,并预留 MIME 编码空间;默认附件上限 100 MB 时,DMS 总邮件上限约 150 MiB。 |
| 邮箱配额 | 面板建邮箱时填的「配额 MB」;不填 = 不限 |
| 附件总量限制 | 全局设置同时应用于 Webmail;DMS 的 Postfix 上限是完整 MIME 邮件的全局值,客户端(如 Foxmail)也受此值限制。勾选“无限额”可关闭上限;API 中填 0 表示无限额。 |
| 远程图片 | 默认不自动显示,使用 Roundcube 原生图片拦截/按需加载功能;全局邮箱设置可调整自动显示默认值。 |
| 外网来信 | 若 VPS 服务商或防火墙未放行公网 TCP 25,则无法接收外部来信 |
| 发信被 Gmail 判垃圾 | 检查 PTR 反解是否指向 mail.<域名>,并确认 SPF / DKIM / DMARC 已配置 |
| 自动配置(autoconfig) | ❌ 暂未生效:DNS 里 autoconfig.<域名> 有 CNAME,但服务器未托管自动配置 XML,客户端自动发现会失败 → 按本文手动填参数 |
| CalDAV / CardDAV(日历通讯录) | ❌ 未部署(DMS 不含),如需可另装 |
六、连不上时怎么排查
在服务器上(或本机有 openssl 的话)逐条测:
# 1) IMAPS 995 是否通 + 证书信息
openssl s_client -connect mail.<域名>:993 -servername mail.<域名> </dev/null | openssl x509 -noout -subject -dates
# 2) 587 STARTTLS 是否可用(看到 "250-STARTTLS" 即正常)
openssl s_client -starttls smtp -connect mail.<域名>:587 -crlf </dev/null | head -20
# 3) POP3S 995
openssl s_client -connect mail.<域名>:995 </dev/null | head -5
# 4) 端口是否被机房拦(从另一台机器测)
for p in 993 995 587 465 143 110 25; do timeout 5 bash -c "exec 3<>/dev/tcp/<服务器IP>/$p" 2>/dev/null && echo "$p 通" || echo "$p 不通"; done
常见错误对照:
| 现象 | 原因 | 处理 |
|---|---|---|
Authentication failed / LOGIN failed |
用户名没写完整地址;或密码错 | 用户名必须是 xxx@域名 完整形式 |
| 能收不能发 | 发信端口/加密错,或没勾「需要认证」 | 用 587 + STARTTLS + 认证 |
STARTTLS not supported |
服务器没配 TLS 证书 | 确认 .env 里有 SSL_TYPE=manual 且证书路径存在;docker compose up -d mail |
| 一直卡在「正在连接」 | 端口被机房封 | 上面第 4 条命令确认;被拦需工单放行 |
| 提示证书错误 | 自签证书 | 见第四节;或按第四节换真证书 |
| 发出去的信进垃圾箱 | PTR 未匹配 / SPF/DKIM 未配 | 面板 → Cloudflare 页推送 DNS;机房面板改 PTR |
服务器侧看日志:
docker exec docker-mailserver sh -c "tail -50 /var/log/mail/mail.log" # 投递/认证日志
docker exec docker-mailserver doveadm auth test boss@<域名> '密码' # 直接验证账号密码
docker exec docker-mailserver setup email list # 账号清单
用脚本发信务必带上
Date和Message-ID头,否则会被内容过滤器判BAD-HEADER-0退信 (真实客户端都会自动带,不受影响)。