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