Class | ActionMailer::Base |
In: |
vendor/rails/actionmailer/lib/action_mailer/base.rb
|
Parent: | Object |
Usage:
class ApplicationMailer < ActionMailer::Base # Set up properties # Properties can also be specified via accessor methods # (i.e. self.subject = "foo") and instance variables (@subject = "foo"). def signup_notification(recipient) recipients recipient.email_address_with_name subject "New account information" body { "account" => recipient } from "system@example.com" end # explicitly specify multipart messages def signup_notification(recipient) recipients recipient.email_address_with_name subject "New account information" from "system@example.com" part :content_type => "text/html", :body => render_message("signup-as-html", :account => recipient) part "text/plain" do |p| p.body = render_message("signup-as-plain", :account => recipient) p.transfer_encoding = "base64" end end # attachments def signup_notification(recipient) recipients recipient.email_address_with_name subject "New account information" from "system@example.com" attachment :content_type => "image/jpeg", :body => File.read("an-image.jpg") attachment "application/pdf" do |a| a.body = generate_your_pdf_here() end end # implicitly multipart messages def signup_notification(recipient) recipients recipient.email_address_with_name subject "New account information" from "system@example.com" body(:account => "recipient") # ActionMailer will automatically detect and use multipart templates, # where each template is named after the name of the action, followed # by the content type. Each such detected template will be added as # a separate part to the message. # # for example, if the following templates existed: # * signup_notification.text.plain.rhtml # * signup_notification.text.html.rhtml # * signup_notification.text.xml.rxml # * signup_notification.text.x-yaml.rhtml # # Each would be rendered and added as a separate part to the message, # with the corresponding content type. The same body hash is passed to # each template. 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
These options are specified on the class level, like ActionMailer::Base.template_root = "/my/templates"
[R] | The mail object instance referenced by this mailer. |
Deliver the given mail object directly. This can be used to deliver a preconstructed mail object, like:
email = MyMailer.create_some_mail(parameters) email.set_some_obscure_header "frobnicate" MyMailer.deliver(email)
# File vendor/rails/actionmailer/lib/action_mailer/base.rb, line 257 257: def deliver(mail) 258: new.deliver!(mail) 259: end
Receives a raw email, parses it into an email object, decodes it, instantiates a new mailer, and passes the email object to the mailer object’s receive method. If you want your mailer to be able to process incoming messages, you’ll need to implement a receive method that accepts the email object as a parameter:
class MyMailer < ActionMailer::Base def receive(mail) ... end end
# File vendor/rails/actionmailer/lib/action_mailer/base.rb, line 244 244: def receive(raw_email) 245: logger.info "Received mail:\n #{raw_email}" unless logger.nil? 246: mail = TMail::Mail.parse(raw_email) 247: mail.base64_decode 248: new.receive(mail) 249: end
Delivers a TMail::Mail object. By default, it delivers the cached mail object (from the create! method). If no cached mail object exists, and no alternate has been given as the parameter, this will fail.
# File vendor/rails/actionmailer/lib/action_mailer/base.rb, line 328 328: def deliver!(mail = @mail) 329: raise "no mail object available for delivery!" unless mail 330: logger.info "Sent mail:\n #{mail.encoded}" unless logger.nil? 331: 332: begin 333: send("perform_delivery_#{delivery_method}", mail) if perform_deliveries 334: rescue Object => e 335: raise e if raise_delivery_errors 336: end 337: 338: return mail 339: end