“新用户没有收到通知邮件”不一定是操作系统发邮件失败。GitLab 的邮件通常要经过应用生成、后台队列、SMTP 服务接收和最终投递,先确定失败在哪一段。

GitLab SMTP 配置从哪里开始

Linux package 安装通常在 /etc/gitlab/gitlab.rb 配置 SMTP,并按对应版本执行 reconfigure 生效。修改前备份,限制配置文件权限,避免把凭据提交到仓库。GitLab SMTP 文档

下面只演示服务商明确支持 STARTTLS 的组合,主机、账号和发件人是示例:

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = 'smtp.example.invalid'
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = 'sender@example.invalid'
gitlab_rails['smtp_authentication'] = 'login'
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
gitlab_rails['smtp_openssl_verify_mode'] = 'peer'
gitlab_rails['gitlab_email_from'] = 'sender@example.invalid'
gitlab_rails['gitlab_email_reply_to'] = 'support@example.invalid'

凭据应另按版本支持的受保护方式配置 smtp_password;上面不是完整可用配置。发件地址可能受服务商限制,reply_to 是回复地址,不是抄送地址。

隐式 TLS 与 STARTTLS 不要混开

隐式 TLS 从连接开始即进行 TLS 握手,STARTTLS 则先建立 SMTP 会话再升级。端口应与服务商规定的模式对应,不能机械认定“465 就把所有 TLS 开关都打开”。

遇到 EOFError: end of file reached,应检查连接在哪一步结束,核对服务地址、模式、证书和服务端日志。不要把关闭证书校验当成修复;STARTTLS 与 SMTP TLS 同时启用也可能冲突。GitLab SMTP 排错

535 提示先看认证

另一条 JavaMail 记录包含:

AuthenticationFailedException:
535 5.7.0 ERR.LOGIN.REQCODE

535 是认证失败的线索,后面的扩展文字还要按服务商解释。检查账号、SMTP 服务是否开通、认证方式,以及是否要求专用客户端授权凭据,不能只反复输入网页登录密码。RFC 4954

JavaMail 与 GitLab 不是同一个运行环境,这个错误只用于对照认证阶段,不应拼成同一次事故。

测试邮件与实际通知分别验证

完成配置后,经授权向受控测试地址发送,再查看收件箱、垃圾箱和服务端结果。GitLab Rails console 中的测试入口为:

Notify.test_email(
  'test-recipient@example.invalid', 'SMTP check', 'Test message'
).deliver_now

地址必须换成有权使用的受控收件人;运行它会真实发邮件。直接测试发送成功,也不表示后台队列、用户地址和实际通知流程全部正常,还应验证真正触发通知的路径。

保留脱敏错误和阶段信息即可,不公开授权码、密码或完整认证会话。