Merge pull request #27227 from MQuy/allow-custom-content-type-in-mail-body

Allow to custom content type when setting mailer body
This commit is contained in:
Rafael Mendonça França 2017-01-06 06:02:22 -05:00
commit e482dce0ed
No known key found for this signature in database
GPG Key ID: FC23B6D0F1EEE948
3 changed files with 38 additions and 4 deletions

View File

@ -1,3 +1,15 @@
* Mime type: allow to custom content type when setting body in headers
and attachments.
Example:
def test_emails
attachments["invoice.pdf"] = "This is test File content"
mail(body: "Hello there", content_type: "text/html")
end
*Minh Quy*
* Exception handling: use `rescue_from` to handle exceptions raised by
mailer actions, by message delivery, and by deferred delivery jobs.

View File

@ -208,6 +208,19 @@ module ActionMailer
# end
# end
#
# You can also send attachments with html template, in this case you need to add body, attachments,
# and custom content type like this:
#
# class NotifierMailer < ApplicationMailer
# def welcome(recipient)
# attachments["free_book.pdf"] = File.read("path/to/file.pdf")
# mail(to: recipient,
# subject: "New account information",
# content_type: "text/html",
# body: "<html><body>Hello there</body></html>")
# end
# end
#
# = Inline Attachments
#
# You can also specify that a file should be displayed inline with other HTML. This is useful
@ -896,15 +909,19 @@ module ActionMailer
yield(collector)
collector.responses
elsif headers[:body]
[{
body: headers.delete(:body),
content_type: self.class.default[:content_type] || "text/plain"
}]
collect_responses_from_text(headers)
else
collect_responses_from_templates(headers)
end
end
def collect_responses_from_text(headers)
[{
body: headers.delete(:body),
content_type: headers[:content_type] || "text/plain"
}]
end
def collect_responses_from_templates(headers)
templates_path = headers[:template_path] || self.class.mailer_name
templates_name = headers[:template_name] || action_name

View File

@ -140,6 +140,11 @@ class BaseTest < ActiveSupport::TestCase
assert_equal("multipart/mixed", email.mime_type)
end
test "set mime type to text/html when attachment is included and body is set" do
email = BaseMailer.attachment_with_content(body: "Hello there", content_type: "text/html")
assert_equal("text/html", email.mime_type)
end
test "adds the rendered template as part" do
email = BaseMailer.attachment_with_content
assert_equal(2, email.parts.length)