Rails 4 邮件程序未在生产 Digital Ocean 服务器中工作
Rails 4 Mailer not working in production Digital Ocean server
我的应用程序中有一个简单的联系表单,它使用我的 Gmail 帐户将电子邮件发送到另一个 Gmail 帐户。出于某种原因,它在开发中完美地发送邮件,但在生产中却没有。我在 DigitalOcean 一键式 Rails 应用程序中托管我的网站。当我尝试在实时版本中发送邮件时,网站挂了一会儿并显示 "We're sorry, but something went wrong."
Gemfile
#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
我从支持台得到了答复,您可以通过 un-commenting 行
在 etc/gai.conf
文件中将 IPv4 优先于 IPv6 来解决这个问题
#precedence ::ffff:0:0/96 100
这背后的原因是 Digital Ocean 默认阻止通过 IPv6 发出的 SMTP 请求。
我的应用程序中有一个简单的联系表单,它使用我的 Gmail 帐户将电子邮件发送到另一个 Gmail 帐户。出于某种原因,它在开发中完美地发送邮件,但在生产中却没有。我在 DigitalOcean 一键式 Rails 应用程序中托管我的网站。当我尝试在实时版本中发送邮件时,网站挂了一会儿并显示 "We're sorry, but something went wrong."
Gemfile
#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
我从支持台得到了答复,您可以通过 un-commenting 行
在etc/gai.conf
文件中将 IPv4 优先于 IPv6 来解决这个问题
#precedence ::ffff:0:0/96 100
这背后的原因是 Digital Ocean 默认阻止通过 IPv6 发出的 SMTP 请求。