You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails邮件生产环境网页端失效,控制台可正常发送求助

解决方案

1. 确认Web进程能读取到正确的SMTP环境变量

控制台能正常发送邮件说明环境变量在控制台上下文里有效,但Web进程(比如Puma、Passenger)可能没有加载这些变量:

  • 如果使用dotenv管理环境变量,确保生产环境的.env.production文件存在且配置正确,且Rails应用启动时已加载该文件。
  • 如果是VPS系统级环境变量(比如在~/.bashrc或/etc/profile中设置),需确保Web进程能继承这些变量。例如用systemd管理Puma时,要在service文件中添加Environment配置项,或重启Web进程前让环境变量生效。

2. 打印Web进程中的SMTP配置进行验证

在处理表单提交的控制器action中添加日志,确认SMTP配置的实际值:

def create
  # 其他业务逻辑...
  Rails.logger.info "当前SMTP配置:#{ActionMailer::Base.smtp_settings.inspect}"
  # 发送邮件的逻辑...
end

提交表单后查看/log/production.log,检查user_name和password是否为预期值。如果这两个字段为空或错误,说明环境变量未正确加载。

3. 调整SMTP配置细节

针对smtp.seznam.cz的465端口,优化配置项:

config.action_mailer.smtp_settings = {
  port: 465, # 改为整数类型,部分SMTP服务器对端口类型敏感
  address: 'smtp.seznam.cz',
  domain: ENV['DOMAIN'],
  user_name: ENV['SMTP_USERNAME'],
  password: ENV['SMTP_PASSWORD'],
  authentication: :plain,
  ssl: true # 465端口为SSL直连,无需enable_starttls_auto和tls配置
}
  • 465端口是SSL加密专用端口,enable_starttls_auto用于普通端口升级TLS连接,保留可能导致认证流程冲突。
  • 将port从字符串改为整数,避免部分SMTP客户端解析错误。

4. 重启Web进程

修改配置或环境变量后,必须重启Web服务器(如Puma、Nginx),确保新配置生效。

内容的提问来源于stack exchange,提问作者user15053812

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 05:05:25