I am trying to set the :host for action mailer default url options.
I have the below set in all the environment files
config.action_mailer.default_url_options = { :host => "localhost" }
I want to make it more dynamic by providing the request host.
when I try to set it by
config.action_mailer.default_url_options = { :host => request.domain }
OR
config.action_mailer.default_url_options = { :host => request.env["SERVER_NAME"] }
It throws error... doesn't recognize "request" object
is there any way I can set this to the request host, not by hardcoding...?
Go to the config folder of your emails project and open environment. rb file and add the following line at the bottom of this file. It tells ActionMailer that you want to use the SMTP server. You can also set it to be :sendmail if you are using a Unix-based operating system such as Mac OS X or Linux.
To preview it, create a file in test/previews and call the mailer method just as you would from any model or controller in your app. Then you can preview the email at [/rails/mailers/notification/welcome](http:// rails/mailers/notification/welcome).
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With