How do I configure the hostname for Rails ActionMailer?

拟墨画扇 提交于 2019-11-30 04:46:03

default_url_options is available from config.action_mailer and should be set in your environment's configuration file.

For example, in config/environments/production.rb:

config.action_mailer.default_url_options = {
  :host => 'www.yourdomain.com'
}

For local testing, modify config/environments/development.rb:

config.action_mailer.default_url_options = {
  :host => '127.0.0.1',
  :port => 3000
}

Then, assuming you have a named route called forgot_password_login, you can generate the login link URL in your mailer using something like this:

forgot_password_login_url(:token => 'a7s8q15sk2...')

You probably want to set :protocol => 'https' as well, btw.

config.action_mailer.default_url_options = { 
    :host => "portal.example.com", 
    :protocol => 'https' 
}
Michael Reinsch

There is another alternative, as described in http://pivotallabs.com/how-i-leaned-to-stop-hating-and-love-action-mailer/

This solution has the advantage that it doesn't require any configuration (so less of a hassle), and works fine as long as you send emails from within controllers.

But if you plan on sending email without going through a controller (e.g. from command line or in response to another email), you need the static configuration.

Sameer

Setting default_url_options directly is deprecated in Rails 3.1. Use url_for instead.

Add parameter :protocol to override default value (http), :protocol => 'https://'. This will create url starting with "https://..." instead of default "http://"

Interestingly, I had the same issue as you did, but in unit tests (while following Michael Hartl's railstutorial). I had this line in my test.rb file, but that didn't help:

config.action_mailer.default_url_options = { host: 'example.com', protocol: 'http' }

I've also added another line like this to test.rb, and surprisingly this solved the issue

default_url_options = { host: 'example.com', protocol: 'http' }

Setting default_url_options directly is deprecated in Rails 3.1

Use the url_for helper to create it:

<%= link_to "click here", url_for(:controller => foo, :action => 'bar', :token => token, :host => 'www.yourdomain.com') %>

Can you just do

<%="click here", :controller => foo, :action => 'bar', :token => token, :host=>request.host -%>
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!