I have a need to send mail from more than 1 SMTP account in Rails and
I stumbled upon this post

http://broadcast.oreilly.com/2009/03/using-multiple-smtp-accounts-w.html

The Author wasn't thrilled with his solution and I'm hoping this forum
can come up with something a little cleaner.

I took a different approach (that I'm not in love with either).

I created and email config class that sets the smtp settings for a
specific configuration, does a yield call (to deliver the mail) and
then replaces the base settings.    This ensures that code that is
happy with the default settings will use them without needing a code
change.

====== email_config.rb ============
class EmailConfig
  @@the_map = {}
  def self.set_config(name, mapping)
    @@the_map[:base] = ActionMailer::Base.smtp_settings if @@the_map
[:base].blank?
    @@the_map[name] = mapping
  end
  def self.run_with_config(name)
    ActionMailer::Base.smtp_settings = @@the_map[name] if @@the_map
[name]
    begin
      RAILS_DEFAULT_LOGGER.debug("EMAIL send as #
{ActionMailer::Base.smtp_settings[:user_name]}")
      yield
    ensure
      ActionMailer::Base.smtp_settings = @@the_map[:base] if @@the_map
[:base]
      RAILS_DEFAULT_LOGGER.debug("EMAIL sent now configured for #
{ActionMailer::Base.smtp_settings[:user_name]}")
    end
  end
end

Now in an after_initialize block in production.rb I can set the
following

  EmailConfig.set_config(:exception, {
    :address        => 'smtp.gmail.com',
    :enable_starttls_auto   => 'true',
    :port           => 587,
    :domain         => 'mydomain.com',
    :authentication => :login,
    :user_name      => 'err...@mydomain.com',
    :password       => 'passwd'
  })

In my case I wanted emails from the exception notification plugin to
goto a different email address.  I needed to modify the
deliver_exception_notification call to the following

EmailConfig.run_with_config(:exception){
        ExceptionNotifier.deliver_exception_notification(exception,
self,
          request, data)}

It works fine but I'm wondering if there is a cleaner way to do this.
Thoughts?

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to rubyonrails-talk@googlegroups.com
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to