| 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