ruby-on-rails Rails Mailer无法在网站上生产,但可以在控制台中工作

yxyvkwin  于 2022-12-20  发布在  Ruby
关注(0)|答案(1)|浏览(176)

我在用头撞墙。
这就是我的问题所在。让我们从非常简单的地方开始。我的应用程序中有一个联系人表单,点击提交后它会发送电子邮件。这个表单在开发模式下运行良好。但由于某些未知原因,它在生产模式下无法运行。
那么,你现在要做什么呢?在config/environments中检查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控制台并粘贴此命令后,一封邮件会被发送到我的邮箱,就像它应该在网站上工作一样。
这是我的生产.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控制台下工作,而不能从网站工作。

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

wgx48brx

wgx48brx1#

好吧,我已经解决了这个问题。
由于一些未知的原因,Rails无法识别ENV[]变量,我真的不知道为什么。
但是当我用“www.example.com“替换了ENV ['SMTP_USERNAME']username@domain.com,用“examplepassword”替换了ENV ['SMTP_PASSWORD']之后,一切都开始工作了,邮件发送器向我的收件箱发送电子邮件。
我不知道,因为进入rails控制台或irb并使用
放置ENV [“SMTP用户名”]
实际上打印了我的smtp用户名,密码和其他环境变量也发生了完全相同的事情。我不知道出了什么问题。

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

相关问题