def mail(headers={}, &block)
@mail_was_called = true
m = @_message
content_type = headers[:content_type]
parts_order = headers[:parts_order]
default_values = self.class.default.merge(self.class.default) do |k,v|
v.respond_to?(:call) ? v.bind(self).call : v
end
headers = headers.reverse_merge(default_values)
headers[:subject] ||= default_i18n_subject
m.charset = charset = headers[:charset]
wrap_delivery_behavior!(headers.delete(:delivery_method))
assignable = headers.except(:parts_order, :content_type, :body, :template_name, :template_path)
assignable.each { |k, v| m[k] = v }
responses, explicit_order = collect_responses_and_parts_order(headers, &block)
create_parts_from_responses(m, responses)
m.content_type = set_content_type(m, content_type, headers[:content_type])
m.charset = charset
if m.multipart?
parts_order ||= explicit_order || headers[:parts_order]
m.body.set_sort_order(parts_order)
m.body.sort_parts!
end
m
end