【问题标题】:Rails 4 Mailer not working in production Digital Ocean serverRails 4 Mailer 无法在生产 Digital Ocean 服务器中工作
【发布时间】:2017-01-26 22:46:16
【问题描述】:

我的应用中有一个简单的联系表单,它使用我的 Gmail 帐户将电子邮件发送到另一个 Gmail 帐户。出于某种原因,它在开发中完美地发送邮件,但在生产中却没有。我在 DigitalOcean 一键式 Rails 应用程序中托管我的网站。当我尝试在实时版本中发送邮件时,网站会暂停一段时间并显示“我们很抱歉,但出了点问题。”

宝石文件

#Mailer
gem 'mail'

development.rb

Rails.application.configure do
  # Settings specified here will take precedence over those in config/application.rb.
  config.cache_classes = false
  config.eager_load = false
  config.consider_all_requests_local       = true
  config.action_controller.perform_caching = false
  config.action_mailer.raise_delivery_errors = false
  config.active_support.deprecation = :log
  config.active_record.migration_error = :page_load
  config.assets.debug = true
  config.assets.digest = true
  config.assets.raise_runtime_errors = true

  config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
  config.action_mailer.perform_deliveries = true
  config.action_mailer.raise_delivery_errors = true
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    :address              => "smtp.gmail.com",
    :port                 => 465,                
    :user_name            => 'foo@gmail.com',
    :password             => 'foo',        
    :authentication       => :login,
    :ssl                  => true,
    :tls                  => true,
    :enable_starttls_auto => true
  }
end

production.rb

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.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?

  config.assets.js_compressor = :uglifier

  config.assets.compile = false

  config.assets.digest = true

  config.log_level = :debug

  config.i18n.fallbacks = true

  config.active_support.deprecation = :notify

  config.log_formatter = ::Logger::Formatter.new

  config.active_record.dump_schema_after_migration = false

  config.action_mailer.default_url_options = { host: 'foo.com.mx' }
  config.action_mailer.perform_deliveries = true
  config.action_mailer.raise_delivery_errors = true
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    :address              => "smtp.gmail.com",
    :port                 => 465,                
    :user_name            => 'foo@gmail.com',
    :password             => 'foo',        
    :authentication       => :login,
    :ssl                  => true,
    :tls                  => true,
    :enable_starttls_auto => true
  }
end

【问题讨论】:

  • 还没有答案,但我刚刚看到一个帖子,据称该帖子称 DigitalOcean 暂时阻止通过 IPv6 发送的 SMTP,如果是这种情况可能是问题所在,我会在收到时更新我的支持票的答案。
  • 日志中有错误吗?

标签: ruby-on-rails production mailer


【解决方案1】:

我从支持中心得到了答复,您可以通过取消注释行来解决此问题,方法是在 etc/gai.conf 文件中优先考虑 IPv4 而不是 IPv6

#precedence ::ffff:0:0/96 100

这背后的原因是 Digital Ocean 默认会阻止通过 IPv6 发出的 SMTP 请求。

【讨论】:

    猜你喜欢
    • 2017-02-25
    • 2023-03-21
    • 1970-01-01
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 2015-03-13
    相关资源
    最近更新 更多