Rails Gmail联系表单 - 适用于localhost但不适用于部署到Heroku时

时间:2017-03-10 22:28:10

标签: ruby-on-rails ruby heroku

我遇到一个奇怪的问题,我正在编写一个GMAIL联系表单 - 它将使用现有的Gmail用户名和密码将电子邮件发送到预先指定的Gmail帐户。

我遇到的问题是,当我在本地运行所有内容时,它的工作正常。另一方面,一旦我部署到Heroku ...我没有收到消息。当我运行:heroku logs -t时,它似乎表明该消息已被发送但仍然没有任何消息通过。

配置:

ActionMailer::Base.default_url_options = { :host => 'domain.herokuapp.com' }  
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.perform_deliveries = true
ActionMailer::Base.raise_delivery_errors = true
ActionMailer::Base.smtp_settings = {
  :address              => "smtp.gmail.com",
  :port                 => 587,
  :enable_starttls_auto => true,
  :domain             => 'domain.herokuapp.com',
  :user_name            => ENV['GMAIL_USERNAME'],
  :password             => ENV['GMAIL_PASSWORD'],
  :authentication       => "login"
}

注意:

domain.herokuapp.com刚刚进入我的实际域名。

服务器日志的屏幕截图:

enter image description here

有没有人知道为什么这不起作用或者可以指向一个资源来解决这个问题?

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,它连接到config / enfironments / production.rb文件中的配置

config.action_mailer.default_url_options = { host: 'http://barteringapps.herokuapp.com' }

我能够通过更改地址来解决这个问题。在开发过程中,它应该是http://127.0.0.1:3000,而它应该是您生产中的域名。

您的Gmail域名也不正确,您应该gmail.com为域名

config.action_mailer.smtp_settings = {
  address: "smtp.gmail.com",
  port: 587,
  domain: ENV["GMAIL_DOMAIN"],
  authentication: "plain",
  user_name: ENV["GMAIL_USERNAME"],
  password: ENV["GMAIL_PASSWORD"],
  enable_starttls_auto: true
  }

我关注这篇文章,但在配置default_url_options时要小心,因为它会给我带来omniauth的问题

https://rubyonrailshelp.wordpress.com/2014/01/02/setting-up-mailer-using-devise-for-forgot-password/