簡體   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