我在用头撞墙。
这就是我的问题所在。让我们从非常简单的地方开始。我的应用程序中有一个联系人表单,点击提交后它会发送电子邮件。这个表单在开发模式下运行良好。但由于某些未知原因,它在生产模式下无法运行。
那么,你现在要做什么呢?在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控制台时工作正常。在开发中完全没有问题。
1条答案
按热度按时间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变量时有问题。我不知道为什么...