-
Notifications
You must be signed in to change notification settings - Fork 5.5k
How To: Send emails from subdomains
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)
**for devise-2.2.3
This seems to be sufficient :
link_to 'Click here to finish setting up your account on RightBonus',
confirmation_url(@resource, :confirmation_token => @resource.confirmation_token, :subdomain => "my_subdomain")
NOTE You must configure the default_url_options[:host] value in your environment configs for this solution to work properly.
# config/environments/development.rb
config.action_mailer.default_url_options = { :host => 'localhost' }
Configure each environment accordingly and things should work as expected.