2012-05-21 54 views
4

我有域名'www.mysite.com',它是託管Drupal和'app.mysite.com'託管Rails應用程序的應用程序。如何使自定義主機爲設計郵件工作?

我有設計郵件網址指向'www.mysite.com'而不是'app.mysite.com'的情況。

在devise.rb,我已經設置如下圖所示:

config.mailer = "Devise::Mailer" 
ActionMailer::Base.default_url_options = { :host => 'app.mysite.com' } 

而且在production.rb:

config.action_mailer.default_url_options = { :host => 'app.mysite.com' } 
ActionMailer::Base.smtp_settings = 
{ 
    :address => 'smtp.sendgrid.net', # SendGrid SMTP server 
    :domain => 'mysite.com',   # SendGrid account domain name 
    :user_name => 'username',    # SendGrid user name 
    :password => 'password',    # SendGrid password 
    :enable_starttls_auto => true, 
    :port => 587, 
    :authentication => :plain, 
} 

在視圖/設計/郵件/ reset_password_instructions.html.erb,確認鏈接看起來如下所示:

<%= link_to 'Change my password', edit_password_url(@resource, :reset_password_token => @resource.reset_password_token) %> 

它點擊忘記通過後成功發送電子郵件字鏈接,並且像本地主機上的魅力一樣工作,但url主機指向www.mysite.com而不是app.mysite.com並引發404錯誤。

我該如何將它指向正確的主機?

回答

3

我做到了,通過它在色器件維基使用子域名的helper方法發送電子郵件描述的代碼照看工作。

module SubdomainHelper 
    def with_subdomain(subdomain) 
    subdomain = (subdomain || "") 
    subdomain += "." unless subdomain.empty? 
    host = Rails.application.config.action_mailer.default_url_options[:host] 
    [subdomain, host].join 
    end 

    def url_for(options = nil) 
    if options.kind_of?(Hash) && options.has_key?(:subdomain) 
     options[:host] = with_subdomain(options.delete(:subdomain)) 
    end 
    super 
    end 
end 

所有這個幫助器方法的作用是檢查是否存在子域散列。如果存在,則該方法在主機之前預先設置子域,並定義新的主機名或其他默認主機名。我沒有經歷這個過程,因爲由於某些原因,它沒有在rails 3.2上工作,並且我不想因爲嚴格的時間限制而浪費時間進一步挖掘它。

我以爲等待,爲什麼不直接在郵件程序url_for方法中定義主機名而不是遍歷所有這些方法。

所以,我所做的就是,在郵件程序中用散列鍵host定義link_to,並將值作爲我的子域傳遞。之後,它像一個魅力:)。

在視圖/設計/郵件/ reset_password_instructions.html.erb,確認鏈接看起來如下圖所示:

<%= link_to 'Change my password', edit_password_url(@resource, :reset_password_token => @resource.reset_password_token, :host => 'app.mysite.com') %> 
+0

天哪 - 那救了我!我正在尋找一種方法來設置主機,如果它是另一個域的管理員密碼休息請求,或者它是在www的普通用戶。謝謝! – awenkhh

4

看起來像Devise中的默認行爲是從主域發送。

這裏有一個頁面,可以幫助: https://github.com/plataformatec/devise/wiki/How-To:-Send-emails-from-subdomains

+0

謝謝@evanbikes,我發現來實現它的方式。我嘗試了一下設計wiki在你上面的鏈接中解釋過的方式,但是由於rails 3.2的一些原因,它拋出了錯誤,並且由於我的截止日期,我不想浪費太多時間去挖掘它。所以,我的解答如下。 –

相關問題