如何在Heroku上为生产环境设置Rails应用程序的邮件发送器

18
我需要使用一个邮件组件来向用户发送设置密码的电子邮件,以便在 Devise 和 active admin 的“可恢复”功能中使用。在开发环境中,我通过在这些文件中添加以下内容来实现此目的:

config/environments/development

#Added per active admin install instructions
config.action_mailer.default_url_options = { :host => 'localhost:3000' }


#These settings are for the sending out email for active admin and consequently the   devise mailer
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,
  :domain             => 'gmail.com', #you can also use google.com
  :authentication     => :plain,
  :user_name          => 'XXXXX@gmail.com',
  :password           => 'XXXXXXX'
}

我如何获得生产环境的相同功能?我想将我的应用程序部署到Heroku。我需要添加哪些文件和代码?


1
你需要在config/environments/production.rb中使用相同的代码。 - house9
如果所有环境都相同,可以将其放在config/application.rb中。 - house9
是的,但在生产环境中我应该填什么:config.action_mailer.default_url_options = { :host => '????' } - banditKing
4
你的应用程序URL为 config.action_mailer.default_url_options = { :host => 'YOURAPPNAME.herokuapp.com' },如果使用自定义域名则为 yourcustomdomain.com - house9
3个回答

13

在开发模式下设置的所有配置都将起作用,但您需要重新配置默认邮件发送器的网址。

所以:

  1. 从development.rb复制并粘贴您的设置。

  2. 将默认的邮件发送器指向您的Heroku应用程序:

    config.action_mailer.default_url_options = { :host => 'YOURAPPNAME.herokuapp.com' }
    

此外,在将应用程序转移到生产环境时,请注意您的 SMTP 可能会有任何电子邮件限制。例如,在开发过程中很难触发 Gmail 的 SMTP 限制,但在生产环境中可能更容易触发。


4
如果在开发模式下运行成功,那么它也会在生产模式下成功。
假设一切都设置正确,在开发中重置密码将会使用您的gmail帐户发送实际的电子邮件。
Devise仅依赖于正确设置的邮件配置(您已经完成了),并配置devise允许重置密码,以及可能需要为电子邮件的From字段配置另一个设置。

5
是的,但我应该在生产环境中将什么放入这个位置呢: config.action_mailer.default_url_options = { :host => '????' }提示:这是一个设置Action Mailer默认URL选项的代码行,需要将主机名加入其中。您需要填写用于运行您的网站的主机名或域名。 - banditKing
1
你需要输入你的应用程序主机URL,例如在 production.rb 中写入 config.action_mailer.default_url_options = { host: 'my-app.herokuapp.com' } - Masroor

4

这应该可以正常工作!

只要config/environments/production.rb有一个例外,与之相同。在开发环境中,default_url_options应该只有一个:host值为'localhost',而在heroku生产环境中,则应该是'YOURAPPNAME.herokuapp.com'。

例如:

config.action_mailer.default_url_options = { :host => 'YOURAPPNAME.herokuapp.com' }

记得在Gmail上解除验证码,否则Heroku(未知来源)将无法发送电子邮件。您可以通过访问此链接来解除: http://www.google.com/accounts/DisplayUnlockCaptcha

只是建议,我认为把这个移到environments.rb文件中更好。

ActionMailer::Base.perform_deliveries = true
ActionMailer::Base.raise_delivery_errors = true

位置在environments/development.rb中

config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true

这在生产环境中是不需要的。

有关gmail将heroku视为未知主机的更多信息,请参见从Rails应用程序(在暂存环境中)发送电子邮件时出现Net :: SMTPAuthenticationError


我已经完全按照这样做了,但是在Heroku上的生产环境中无法发送Gmail电子邮件。是否有什么变化? - Michael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接