Class: ActionMailer::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/action_mailer/base.rb

Overview

Usage:

class ApplicationMailer < ActionMailer::Base
  def post_notification(recipients, post)
    @recipients          = recipients
    @from                = post.author.email_address_with_name
    @headers["bcc"]      = SYSTEM_ADMINISTRATOR_EMAIL
    @headers["reply-to"] = "[email protected]"
    @subject             = "[#{post..name} #{post.title}]"
    @body["post"]        = post
  end

  def comment_notification(recipient, comment)
    @recipients      = recipient.email_address_with_name
    @subject         = "[#{comment.post.project.client.firm..name}]" +
                       " Re: #{comment.post.title}"
    @body["comment"] = comment
    @from            = comment.author.email_address_with_name
    @sent_on         = comment.posted_on
  end
end

# After this post_notification will look for "templates/application_mailer/post_notification.rhtml"
ApplicationMailer.template_root = "templates"

ApplicationMailer.create_comment_notification(david, hello_world)  # => a tmail object
ApplicationMailer.deliver_comment_notification(david, hello_world) # sends the email

Configuration options

These options are specified on the class level, like ActionMailer::Base.template_root = "/my/templates"

  • template_root - template root determines the base from which template references will be made.

  • logger - the logger is used for generating information on the mailing run if available. Can be set to nil for no logging. Compatible with both Ruby’s own Logger and Log4r loggers.

  • server_settings - Allows detailed configuration of the server:

    • :address Allows you to use a remote mail server. Just change it away from it’s default “localhost” setting.

    • :port On the off change that your mail server doesn’t run on port 25, you can change it.

    • :domain If you need to specify a HELO domain, you can do it here.

    • :user_name If your mail server requires authentication, set the username and password in these two settings.

    • :password If your mail server requires authentication, set the username and password in these two settings.

    • :authentication If your mail server requires authentication, you need to specify the authentication type here. This is a symbol and one of :plain, :login, :cram_md5

  • raise_delivery_errors - whether or not errors should be raised if the email fails to be delivered.

  • delivery_method - Defines a delivery method. Possible values are :smtp (default), :sendmail, and :test. Sendmail is assumed to be present at “/usr/sbin/sendmail”.

  • perform_deliveries - Determines whether deliver_* methods are actually carried out. By default they are, but this can be turned off to help functional testing.

  • deliveries - Keeps an array of all the emails sent out through the Action Mailer with delivery_method :test. Most useful for unit and functional testing.

Constant Summary collapse

@@server_settings =
{ 
  :address        => "localhost", 
  :port           => 25, 
  :domain         => 'localhost.localdomain', 
  :user_name      => nil, 
  :password       => nil, 
  :authentication => nil
}
@@raise_delivery_errors =
true
@@delivery_method =
:smtp
@@perform_deliveries =
true
@@deliveries =
[]

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeBase

Returns a new instance of Base.



88
89
90
91
# File 'lib/action_mailer/base.rb', line 88

def initialize
  @bcc = @cc = @from = @recipients = @sent_on = @subject = @body = nil
  @headers = {}
end

Instance Attribute Details

#bccObject

Returns the value of attribute bcc.



86
87
88
# File 'lib/action_mailer/base.rb', line 86

def bcc
  @bcc
end

#bodyObject

Returns the value of attribute body.



86
87
88
# File 'lib/action_mailer/base.rb', line 86

def body
  @body
end

#ccObject

Returns the value of attribute cc.



86
87
88
# File 'lib/action_mailer/base.rb', line 86

def cc
  @cc
end

#fromObject

Returns the value of attribute from.



86
87
88
# File 'lib/action_mailer/base.rb', line 86

def from
  @from
end

#headersObject

Returns the value of attribute headers.



86
87
88
# File 'lib/action_mailer/base.rb', line 86

def headers
  @headers
end

#recipientsObject

Returns the value of attribute recipients.



86
87
88
# File 'lib/action_mailer/base.rb', line 86

def recipients
  @recipients
end

#sent_onObject

Returns the value of attribute sent_on.



86
87
88
# File 'lib/action_mailer/base.rb', line 86

def sent_on
  @sent_on
end

#subjectObject

Returns the value of attribute subject.



86
87
88
# File 'lib/action_mailer/base.rb', line 86

def subject
  @subject
end

Class Method Details

.create(to, subject, body, from, timestamp = nil, headers = nil) ⇒ Object

:nodoc:



111
112
113
114
115
116
117
118
119
120
# File 'lib/action_mailer/base.rb', line 111

def create(to, subject, body, from, timestamp = nil, headers = nil) #:nodoc:
  m = TMail::Mail.new
  m.to, m.subject, m.body, m.from = to, subject, body, from
  m.date = timestamp.respond_to?("to_time") ? timestamp.to_time : (timestamp || Time.now)    
  headers.each do |k, v|
    m[k] = v
  end

  return m
end

.deliver(mail) ⇒ Object

:nodoc:



122
123
124
125
# File 'lib/action_mailer/base.rb', line 122

def deliver(mail) #:nodoc:
  logger.info "Sent mail:\n #{mail.encoded}" unless logger.nil?
  send("perform_delivery_#{delivery_method}", mail) if perform_deliveries
end

.mail(to, subject, body, from, timestamp = nil, headers = nil) ⇒ Object

:nodoc:



107
108
109
# File 'lib/action_mailer/base.rb', line 107

def mail(to, subject, body, from, timestamp = nil, headers = nil) #:nodoc:
  deliver(create(to, subject, body, from, timestamp, headers))
end

.method_missing(method_symbol, *parameters) ⇒ Object

:nodoc:



94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/action_mailer/base.rb', line 94

def method_missing(method_symbol, *parameters)#:nodoc:
  case method_symbol.id2name
    when /^create_([_a-z]*)/
      create_from_action($1, *parameters)
    when /^deliver_([_a-z]*)/
      begin
        deliver(send("create_" + $1, *parameters))
      rescue Object => e
        raise e if raise_delivery_errors
      end
  end        
end