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