如何为Rails ActionMailer配置主机名?

ede*_*ill 20 ruby-on-rails actionmailer hostname actioncontroller

我正在处理一个相当传统的忘记密码电子邮件 - 我想通过电子邮件向用户发送密码更改令牌,这些令牌嵌入在链接中,他们可以点击这些令牌来更改密码.我通过传统的ActionMailer发送电子邮件.

如果我使用普通的link_to标签

<%= link_to "click here", :controller => foo, :action => 'bar', :token => token %>
Run Code Online (Sandbox Code Playgroud)

我得到一个相对链接 - 相当无用的电子邮件.

如果我加入

:only_path => false,然后它说我需要设置错误default_url_options[:host].ActionController文档暗示您通过覆盖控制器中的#default_url_options方法来实现这一点.当然有一个配置选项告诉Rails它的主机名是什么,而不添加我自己的配置文件,解析它等?

小智 36

default_url_options可从config.action_mailer,应该在你的环境中的配置文件进行设置.

例如,在config/environments/production.rb:

config.action_mailer.default_url_options = {
  :host => 'www.yourdomain.com'
}
Run Code Online (Sandbox Code Playgroud)

对于本地测试,请修改config/environments/development.rb:

config.action_mailer.default_url_options = {
  :host => '127.0.0.1',
  :port => 3000
}
Run Code Online (Sandbox Code Playgroud)

然后,假设您有一个名为的路由forgot_password_login,您可以使用以下内容在邮件程序中生成登录链接URL:

forgot_password_login_url(:token => 'a7s8q15sk2...')
Run Code Online (Sandbox Code Playgroud)


mcr*_*mcr 26

你可能想设置:protocol =>'https',顺便说一句.

config.action_mailer.default_url_options = { 
    :host => "portal.example.com", 
    :protocol => 'https' 
}
Run Code Online (Sandbox Code Playgroud)