class ActionMailer::Base
def mail(headers = {}, &block)
end
format.html
format.text(content_transfer_encoding: "base64")
mail(to: 'mikel@test.lindsaar.net') do |format|
The block syntax also allows you to customize the part headers if desired:
+text/html+ parts.
Which will render a +multipart/alternative+ email with +text/plain+ and
end
format.html { render html: "
Hello Mikel!
".html_safe }format.text { render plain: "Hello Mikel!" }
mail(to: 'mikel@test.lindsaar.net') do |format|
You can even render plain text directly without using a template:
end
format.html
format.text
mail(to: 'mikel@test.lindsaar.net') do |format|
If you do pass a block, you can render specific templates of your choice:
And now it will look for all templates at "app/views/notifications" with name "another".
mail(template_path: 'notifications', template_name: 'another')
However, those can be customized:
If no welcome template exists, it will raise an ActionView::MissingTemplate error.
Will look for all templates at "app/views/notifier" with name "welcome".
end
end
mail(to: 'mikel@test.lindsaar.net')
def welcome
default from: 'no-reply@test.lindsaar.net'
class Notifier < ActionMailer::Base
For example:
ready to call :deliver on to send.
content type and sequence, and return a fully prepared +Mail::Message+
each of these templates intelligently, making educated guesses on correct
method name that it is being called from, it will then create parts for
templates in the view paths using by default the mailer name and the
If you do not pass a block to the +mail+ method, it will find all
from' value.
to the +:sender+ in preference to the +:from+ field for the 'envelope
one in +:from+. Mail will actually use the +:return_path+ in preference
when you want delivery notifications sent to a different address than the
the 'envelope from' address for the Mail message. Setting this is useful
When a +:return_path+ is specified as header, that value will be used as
method.
as part of the headers hash or use the headers['name'] = value
If you need other headers not listed above, you can either pass them in
end
reply_to: 'bounces@test.lindsaar.net'
bcc: 'email_logger@test.lindsaar.net',
default from: 'no-reply@test.lindsaar.net',
class Notifier < ActionMailer::Base
by using the ::default class method:
You can set default values for any of the above headers (except +:date+)
* +:date+ - The date to say the email was sent on.
* +:reply_to+ - Who to set the +Reply-To+ header of the email to.
addresses, or an array of addresses.
* +:bcc+ - Who you would like to Blind-Carbon-Copy on this email, can be a string of
or an array of addresses.
* +:cc+ - Who you would like to Carbon-Copy on this email, can be a string of addresses,
* +:from+ - Who the message is from
of addresses.
* +:to+ - Who the message is destined for, can be a string of addresses, or an array
humanized version of the +action_name+
[mailer_scope, action_name] or if this is missing, will translate the
ask the \Rails I18n class for a translated +:subject+ in the scope of
* +:subject+ - The subject of the message, if this is omitted, Action Mailer will
the most used headers in an email message, these are:
It accepts a headers hash. This hash allows you to specify
two ways to call this method, with a block, or without a block.
The main method that creates the message and renders the email templates. There are
def mail(headers = {}, &block) return message if @_mail_was_called && headers.blank? && !block # At the beginning, do not consider class default for content_type content_type = headers[:content_type] headers = apply_defaults(headers) # Apply charset at the beginning so all fields are properly quoted message.charset = charset = headers[:charset] # Set configure delivery behavior wrap_delivery_behavior!(headers[:delivery_method], headers[:delivery_method_options]) assign_headers_to_message(message, headers) # Render the templates and blocks responses = collect_responses(headers, &block) @_mail_was_called = true create_parts_from_responses(message, responses) wrap_inline_attachments(message) # Set up content type, reapply charset and handle parts order message.content_type = set_content_type(message, content_type, headers[:content_type]) message.charset = charset if message.multipart? message.body.set_sort_order(headers[:parts_order]) message.body.sort_parts! end message end