2012-08-17 71 views
9

我需要使用郵件程序向用戶發送電子郵件,以將其密碼設置爲Devise和活動管理員的「可恢復」功能。如何在Heroku上的Rails應用程序中爲生產環境設置郵件程序

配置/環境/發展

#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   => '[email protected]', 
    :password   => 'XXXXXXX' 
} 

如何獲得生產環境相同的功能:在開發環境中我已經加入以下這些文件這樣做呢?我想將我的應用程序部署到Heroku。我需要添加哪些文件和代碼?

+1

您需要在config/environments/production.rb中使用相同的代碼 – house9 2012-08-17 01:25:35

+0

或者將其放在config/application.rb中(如果對於所有環境都是相同的) – house9 2012-08-17 01:26:30

+0

是的,但是我應該在生產中放置什麼:config.action_mailer。 default_url_options = {:host =>'????' } – banditKing 2012-08-17 17:23:01

回答

3

如果它在開發模式下工作,那麼它將在生產模式下工作。

假設一切都設置正確,在開發中重置密碼已經發送了一個真正的電子郵件使用您的Gmail帳戶。

設計只依賴郵件配置設置正確(你已經完成),並配置設計允許密碼重置,並可能另一個設置爲電子郵件的發件人字段。

+2

是的,但是我應該怎麼把這個放在生產中: config.action_mailer.default_url_options = {:host =>'????' } – banditKing 2012-08-17 02:11:30

7

您在開發模式下設置的所有配置都將起作用,除非您需要重新配置默認郵件程序url。

所以。

  1. 從development.rb複製粘貼您的設置。

  2. 點您的默認郵件到你的Heroku應用:

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

此外,小心的移動到生產時,您的SMTP可能有任何電子郵件的限制。例如,在開發過程中很難觸發gmail的smtp限制,但在生產中可能更容易觸發它們。

2

這應該很好!

只要config/environments/production.rb與異常相同。 default_url_options應該有一個:主機值爲'localhost'的只有在開發中和'YOURAPPNAME.herokuapp.com'在heroku製作中。

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 

,地點是在環境/ development.rb作爲

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

它不需要生產。

請參閱Net::SMTPAuthenticationError when sending email from Rails app (on staging environment)瞭解有關gmail將heroku視爲未知主機的更多信息。

相關問題