How to set the ActionMailer default_url_options’s :host dynamically to the request’s hostname?

It is also possible to set a default host that will be used in all mailers by setting the :host option in the default_url_options hash

in an application_controller.rb add:

class ApplicationController < ActionController::Base
  def default_url_options
    { host: request.host_with_port }
  end
end

Source: https://edgeguides.rubyonrails.org/action_controller_overview.html#default-url-options

Alternatively, you can pass the request when calling the mailer function from the controller

class UserMailer < ActionMailer::Base

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

Source : https://guides.rubyonrails.org/action_mailer_basics.html#generating-urls-with-named-routes

Leave a Comment

error code: 521