繁体   English   中英

Rails Mailer 不在网站上的生产环境中工作,但在控制台中工作

[英]Rails Mailer not working in production on website, but works in console

我正在用头撞墙。

所以这是我的问题。 让我们从非常简单的开始。 我的应用程序中有一个联系表,它会在点击提交后发送电子邮件。 这种形式在开发模式下工作得很好。 但由于某些未知原因,它在生产中不起作用。

那么,你现在会做什么? 检查配置/环境中的 production.rb? 已经完成了。 实际上不止于此——我曾尝试在我的 VPS 上以生产模式使用 Rails 控制台发送邮件。 它有效。

UserMailer.send_data(Deliverer.new(full_name: "John Smith", email: "john.smith@yahoo.com", message: "Hello how are you")).deliver_now

我有一个名为 Deliverer 的模型,纯粹用于反垃圾邮件目的。 在我的服务器上进入生产环境中的 Rails 控制台并粘贴此命令后,一封邮件将发送到我的邮箱,就像它应该在网站上工作一样。

这是我的 production.rb 文件

require "active_support/core_ext/integer/time"

Rails.application.configure do
  config.cache_classes = true
  config.eager_load = true
  config.consider_all_requests_local       = false
  config.action_controller.perform_caching = true

  config.public_file_server.enabled = ENV["RAILS_SERVE_STATIC_FILES"].present?
  config.assets.compile = true
  config.active_storage.service = :local

  config.force_ssl = true

  config.action_mailer.default_url_options = { host: ENV['DOMAIN'] }

  config.action_mailer.raise_delivery_errors = true
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    port: '465',
    address: 'smtp.seznam.cz',
    domain: ENV['DOMAIN'],
    user_name: ENV['SMTP_USERNAME'],
    password: ENV['SMTP_PASSWORD'],
    authentication: :plain,
    enable_starttls_auto: true,
    ssl: true,
    tls: true
  }

  config.log_level = :info

  config.log_tags = [ :request_id ]


  config.action_mailer.perform_caching = false

  config.i18n.fallbacks = true
  config.active_support.report_deprecations = false
  config.log_formatter = ::Logger::Formatter.new

  if ENV["RAILS_LOG_TO_STDOUT"].present?
    logger           = ActiveSupport::Logger.new(STDOUT)
    logger.formatter = config.log_formatter
    config.logger    = ActiveSupport::TaggedLogging.new(logger)
  end

  # Do not dump schema after migrations.
  config.active_record.dump_schema_after_migration = false
end

这是我在 /log/production.log 中发现的 SMTP 错误

Net::SMTPFatalError (550 5.7.1 未认证,请先使用AUTH。

正如我所说,此错误仅在尝试从网站发送邮件时出现在生产环境中。 从生产作品的控制台发送电子邮件,网站上的表格没有。 正如我所说,在开发中一切正常,包括控制台和表单本身。

我不知道该怎么办。

TL:DR邮件程序在开发模式下工作(来自网站和 Rails 控制台)。 在生产中,邮件程序只能在 Rails 控制台中工作,而不是在网站上工作。

从网站提交表单后生产中的邮件程序不起作用,但在使用 Rails 控制台时工作正常。 开发完全没有问题。

好的,我已经设法解决了这个问题。

由于某些未知原因,Rails 无法识别 ENV[] 变量。 我真的不知道为什么。

但是,一旦我将 ENV['SMTP_USERNAME'] 替换为“username@domain.com”并将 ENV['SMTP_PASSWORD'] 替换为“examplepassword”,它就开始工作并且邮件程序将电子邮件发送到我的收件箱。

我不知道,因为进入 rails console 或 irb 并使用

放 ENV['SMTP_USERNAME']

实际上打印了我的 smtp 用户名,密码和其他环境变量也发生了完全相同的事情。 我不知道出了什么问题。

编辑好吧,我已经做了一些故障排除。 似乎只有 config/environments/production.rb 在访问 ENV 变量时有问题。 我不确定为什么...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM