2017-05-14 58 views
6

我不能理解關於電子郵件的一些微不足道的東西,但defaul_url_options中的主機是做什麼的?我需要配置smtp設置來配置電子郵件的發送方式,但default_url_options與此有關嗎?什麼是ActionMailer default_url_options?

config.action_mailer.raise_delivery_errors = true 
    config.action_mailer.delivery_method = :smtp 
    host = '<your heroku app>.herokuapp.com' 
    config.action_mailer.default_url_options = { host: host } 
    ActionMailer::Base.smtp_settings = { 
    :address  => 'smtp.sendgrid.net', 
    :port   => '587', 
    :authentication => :plain, 
    :user_name  => ENV['SENDGRID_USERNAME'], 
    :password  => ENV['SENDGRID_PASSWORD'], 
    :domain   => 'heroku.com', 
    :enable_starttls_auto => true 
    } 

回答

8

default_url_options設置是在電子郵件模板構建鏈接的網址是有用的。通常,需要使用此配置選項設置:host(即Web服務器的完全限定名稱)。它與發送電子郵件無關,它只在電子郵件中配置顯示鏈接

需要進行設置,這是很好的記錄在Rails Guides以及ActionMailer::Base sources

URLs can be generated in mailer views using url_for or named routes. Unlike controllers from Action Pack, the mailer instance doesn't have any context about the incoming request, so you'll need to provide all of the details needed to generate a URL.

When using url_for you'll need to provide the :host , :controller , and :action:

<%= url_for(host: "example.com", controller: "welcome", action: "greeting") %> 

When using named routes you only need to supply the :host

<%= users_url(host: "example.com") %> 

因此,要改寫的文檔,網頁中,當前Web服務器的名稱(在絕對使用鏈接)取自傳入的請求信息。但是,在呈現電子郵件時(沒有請求),您沒有這些信息,這就是爲什麼您必須手動提供此信息,以便電子郵件中的鏈接正常工作。

1

您是否嘗試過在ActionMailer模板中生成URL?如果你做了至少一次,那麼你可能熟悉以下錯誤:

ActionView::TemplateError (Missing host to link to! Please provide :host parameter or set default_url_options[:host]) 

這是因爲實例的ActionMailer沒有關於傳入請求的任何方面,所以你需要提供:主機, :控制器和:action :.如果您使用命名路由,ActionPack將爲您提供控制器和操作名稱。否則,使用url_for helper需要傳遞所有參數。

<%= message_url %> 
<%= url_for :controller => "messages", :action => "index" %> 

無論你的選擇,你總是需要提供主機選項​​生成的ActionMailer的URL。如圖中的ActionMailer指南,你基本上有兩種方法主機值傳遞給的ActionMailer:

1. set a global value 
2. pass the option each time you generate an URL 

定義default_url_options是更好,然後通過URL每次。 這就是我們爲什麼這樣做。

相關問題