Customizable Email sender address with Devise

David Paluy - Aug 19 '20 - - Dev Community

When installing the devise gem in your Rails application, you will find the following:

Devise.setup do |config|
  # ...
  config.mailer_sender = 'please-change-me-at-config-initializers-devise@example.com'
  # ...
end
Enter fullscreen mode Exit fullscreen mode

You can set static email, for example:

Devise.setup do |config|
  # ...
  config.mailer_sender = 'Acme Team <team@acme.com>'
  # ...
end
Enter fullscreen mode Exit fullscreen mode

But if you need to allow your back-office team member periodically to customize this parameter, how would you do this?

I recommend using rails-settings gem.

class Setting < RailsSettings::Base
  field :email_from, type: :string, default: 'Acme Team <team@acme.com>'
end
Enter fullscreen mode Exit fullscreen mode

Now, if you try adding this Setting.email_from to devise.rb initializer, you will get an error: You cannot use settings before Rails initialize. (RuntimeError).

To solve this problem, do the following:

Devise.setup do |config|
  # ...
  config.mailer_sender = ->(_devise_mapping) { SiteConfig.email_from }
  # ...
end
Enter fullscreen mode Exit fullscreen mode

Happy Hacking!

. . . . . . . . . . . . . . . .