Skip to content

How To: Send emails from subdomains

josevalim edited this page Jan 24, 2012 · 8 revisions

Devise sends registration confirmations, forgotten password messages, and other email messages. These will originate from the main domain by default, but you can modify the application so these emails originate from subdomains.

One of the approaches to making that work is to give the url_for helper a :subdomain option.

# app/helpers/subdomain_helper.rb

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

The next step is crucial. Make sure that Devise mixes in your new subdomain helper in config/application.rb

  config.to_prepare do
    Devise::Mailer.class_eval do 
      helper :subdomain 
    end
  end

Now when you do a link_to in your Devise mailer template, you can specify a :subdomain option.

link_to 'Click here to finish setting up your account on RightBonus',
  confirmation_url(@resource, :confirmation_token => @resource.confirmation_token, :subdomain => @resource.subdomain)
Clone this wiki locally