如何在发送电子邮件时获取动态主机

时间:2014-05-19 07:10:32

标签: ruby-on-rails email actionmailer

如果我在具有相同环境的不同系统中启动rails服务器,我需要获得动态主机。我如何获得主机并将其发送到邮件正文。

目前正在使用以下配置,

in config/development.rb: 

config.action_mailer.default_url_options = { :host => "example.com" }

in app/mailers/notifications.html.erb :

<%= test_url(id) %>

2 个答案:

答案 0 :(得分:1)

您可以在从控制器调用邮件程序功能时传递请求 -

class UserMailer < ActionMailer::Base

  def welcome_email(user, request)
    UserMailer.default_url_options[:host] = request.host_with_port #option1
    @user = user
    @url  = user_url(@user, host: request.host_with_port ) #option2 (do this for each link)
    mail(:to => user.email,
         :subject => "Welcome to My Awesome Site")
  end
end

在上面的代码中request.host_with_port代表您的"example.com"

以上是提供请求主机的更动态的方法,因为您可以看到在从控制器调用邮件程序功能时可以传递请求。

这是您可以检查的来源 - Generating-urls-in-action-mailer-views

这也是action-mailer-default-url-options-and-request-host的解释,在此标记为要阅读的答案。

答案 1 :(得分:0)

对不同应用程序服务器的统一处理主要是一个功能。

如果你想区分我会建议设置和使用环境变量。

例如,您在主机中导出具有不同值的APP_SERVER变量,然后从Ruby / Rails代码中访问它们

ENV['APP_SERVER']