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
相关产品推荐
相关产品推荐

