views:

203

answers:

4

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.

A: 

You can set an environment variable in one of your environment files with the from email and use it in mailer. I was also stuck with this a few days ago.

In my config/environment.rb I have,

FROM_EMAIL = "[email protected]"
Waseem
But then you still have to "from" in each mailer action.
Alexandre
+4  A: 

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
  alias_method_chain :from, :default
  def from_with_default(input=nil)
    return from_without_default(input) || "[email protected]" if input.nil?
    from_without_default(input)
  end
end
KandadaBoggu
+2  A: 

In Rails 3:

config/environments/development.rb:

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

config/environments/production.rb:

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

I went with the monkey-patching method that KandadaBoggu suggested. However, it does not work quite right in Rails 2.3.8; you can't override the default. This works, however:

def from_with_default(input=nil)
  return instance_variable_set("@from", input) unless input.nil?
  from_without_default || FROM_EMAIL
end
alias_method_chain :from, :default
lawrence