Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ActionMailer: Default From: address?

Googled for this to no avail. Didn't find anything in the API either. I was expecting some kind of class method or configuration option to set it...

So, rather than calling

from "[email protected]"

for every method, it could be called automatically.

like image 519
Alexandre Avatar asked Mar 15 '10 04:03

Alexandre


People also ask

What is ActionMailer?

Action Mailer allows you to send emails from your application using mailer classes and views.

What is Action_ mailer in Rails?

Action Mailer allows you to send emails from your application using a mailer model and views. So, in Rails, emails are used by creating mailers that inherit from ActionMailer::Base and live in app/mailers. Those mailers have associated views that appear alongside controller views in app/views.

How do I Preview Mailer in Rails?

rails generates a mail preview if you use rails g mailer CustomMailer . You will get a file CustomMailerPreview inside spec/mailers/previews folder. Here you can write your method that will call the mailer and it'll generate a preview.


1 Answers

Rails 3

config/environments/development.rb:

ActionMailer::Base.default :from => '[email protected]'

config/environments/production.rb:

ActionMailer::Base.default :from => '[email protected]'

You can also set this per mailer:

class MyMailer < ActionMailer::Base
  default :from => '[email protected]'
end

Rails 2

This is not supported by default. But you can achieve this functionality by using the action_mailer_callbacks plugin. Essentially this plugin allows you to add before and after filters for the deliver method.

class FooMailer < ActionMailer::Base
  before_deliver do |mail|
    mail.from = "[email protected]"
  end

end

Reference:

1) Article discussing the plugin.

OR

You can monkey patch the from method of ActionMailer::Base.

Add the code below to your config\initializers\mail.rb

class ActionMailer::Base
  class_inheritable_hash :default
  def from_with_default(input=nil)
    return from_without_default(input) || default[:from] if input.nil?
    from_without_default(input)
  end
  alias_method_chain :from, :default
end

Now you can configure your default value as follows:

config/environments/development.rb:

ActionMailer::Base.default = {:from => '[email protected]'}

config/environments/production.rb:

ActionMailer::Base.default = {:from => '[email protected]'}

You can also set this per mailer:

class MyMailer < ActionMailer::Base
  self.default = {:from => '[email protected]'}
end
like image 92
Harish Shetty Avatar answered Oct 13 '22 11:10

Harish Shetty