最近有不少朋友在折腾自建论坛,其中 rhex 因为其简洁美观的界面和现代化的技术栈,成了很多技术博主和极客的入手首选。

但是,很多人(包括我自己)在 Docker 部署过程中,都卡在了同一个地方:SMTP 邮件配置测试发送失败,或者发送后收不到邮件

看着后台显示 Sent successfully 但邮箱空空如也,确实让人头大。别急,这通常不是 rhex 的锅,而是配置或网络环境的细节没对上。今天就来拆解一下常见的坑,帮你把这个问题彻底解决。

为什么收不到邮件?

在定位问题之前,我们需要明确邮件发送失败的几个常见维度:

  1. 鉴权信息错误:账号、客户端授权码输错了。
  2. 端口被封锁:宿主机或容器内部网络限制。
  3. SSL/TLS 版本不匹配:旧系统与新协议的不兼容。
  4. 域名解析或防火墙拦截:邮件被标记为垃圾或拦截。

第一步:检查基础配置(别笑,这里最容易错)

rhex 的 SMTP 配置通常在环境变量或 .env 文件中。请仔细核对以下几点:

  • SMTP Host & Port
    • 如果你用的是 SSL 连接(通常端口 465),请确保端口填对。
    • 如果你用的是 TLS/STARTTLS(通常端口 587),注意 SSL 字段是否需要关闭(取决于具体实现)。
    • 经验之谈:许多用户混淆了 465 (SSL) 和 587 (TLS)。建议优先尝试 465 端口配合 SSL=true,如果不行再试 587。
  • Encryption
    • 有些服务商(如 QQ 邮箱、163 邮箱、Gmail)对加密方式有严格要求。例如,QQ 邮箱通常要求 SSL 和 465。
  • Credentials
    • 重点:大多数主流邮箱(QQ、163、Gmail)在用于第三方客户端时,不需要输入登录密码,而是需要**"客户端授权码"**或 "App Password"。请务必去邮箱设置里生成一个新的授权码,并在 rhex 配置中填入这个码,而不是你的登录密码。

第二步:Docker 网络与端口排查

既然是 Docker 部署,网络隔离是常见嫌疑人。

  1. 检查容器日志

    docker logs <your-rhex-container-id> -f
    

    当你点击“发送测试邮件”时,观察日志是否有报错。如果有 Connection refusedTimeoutAuthentication failed,这些关键字就是突破口。

  2. 容器内测试连通性

    进入容器内部,测试是否能 ping 通或 telnet 到 SMTP 服务器。

    docker exec -it <your-rhex-container-id> sh
    # 以 QQ 邮箱为例,测试 465 端口
    telnet smtp.qq.com 465
    # 或者使用 nc
    nc -vz smtp.qq.com 465
    

    如果连接不通,说明是容器内部网络问题,或者宿主机防火墙挡住了出站流量。

  3. 检查宿主机防火墙: 如果你的服务器(如云服务器 ECS/CVM)开启了安全组,请确保出站规则允许了 25、465、587 等邮件端口的流量。很多云厂商默认只开 80/443/22,导致邮件发不出去。

第三步:常见邮箱服务商的特殊配置

QQ 邮箱

  • 主机:smtp.qq.com
  • 端口:465 (SSL) 或 587 (TLS)
  • 加密:SSL 或 TLS
  • 账号:你的 QQ 邮箱地址
  • 密码:客户端授权码

163/126 邮箱

  • 主机:smtp.163.comsmtp.126.com
  • 端口:465 (SSL) 或 587 (TLS)
  • 注意:163 邮箱有时会对新注册的 IP 进行频率限制,被拒收概率较高,建议作为备选。

Gmail

  • 主机:smtp.gmail.com
  • 端口:587 (TLS)
  • 注意:Google 最近收紧了安全策略,可能需要启用两步验证并生成应用专用密码。

第四步:如果还是不行?

  1. 更换邮件服务商: 如果自建邮箱(如 QQ/163)一直不稳定,建议使用专业的邮件推送服务,如 MailgunSendGridAmazon SES 或国内的 阿里云邮件推送。这些服务通常提供 API 或更稳定的 SMTP 接入,且送达率更高。

  2. 检查 DNS 记录: 确保你发送通知的域名(From 域名)有正确的 SPF 和 DKIM 记录。否则,邮件极有可能被收件方直接丢进垃圾箱或拒收。

  3. 查看 rhex 官方文档或社区: rhex 的文档通常会有最新的配置示例。如果以上步骤都做了还是不行,可以在 rhex 的 GitHub Issues 或用户社区中搜索类似报错,看看是否有已知 Bug 或特定版本的兼容性问题。

总结

Docker 部署 rhex 论坛收不到邮件,80% 的情况是授权码填错端口/加密协议不匹配,剩下 15% 是网络/防火墙问题,最后 5% 可能是服务商拦截

按照上面的步骤逐级排查,基本上都能定位到问题所在。别气馁,折腾清楚这些底层问题,对你的网络知识也是一大提升!

有其他发现或技巧,欢迎在评论区分享交流!

标签: none

评论已关闭