Sending HTML Mail
Rails is great at generating HTML, so of course ActionMailer can generate HTML. It works almost like generating text messages, but with a few more details. Because some users really prefer text email messages, this demonstration will give them a choice. The form in app/views/awards/show.html.erb used to request the email, previously shown in Example 17-5, will have an extra checkbox. This extra component sets a parameter identifying whether to send “rich text” (really HTML) email, highlighted in Example 17-6. (This code is in ch17/student011.)
Example 17-6. Adding a checkbox for choosing whether to send HTML or text email
<% form_tag email_student_award_path(@student, @award) do %><p><%= check_box_tag :use_html %><label for="use_html">Use rich text?</label></p><%= submit_tag 'Email me this award' %> <% end %>
The email method in awards_controller, previously shown in Example 17-2, grows a little more
complex to support the checkbox’s new :use_html parameter, as shown in Example 17-7.
Example 17-7. Providing controller support for sending HTML-based email, when desired
def email
@award = @student.awards.find(params[:id])
if params[:use_html]
AwardMailer.deliver_html_certificate(@award, current_user.email)
else
AwardMailer.deliver_certificate(@award, current_user.email)
end
flash[:notice] = "Email has been sent"
redirect_to([@student, @award])
endIf the checkbox was checked, the user wants rich text, and so the
controller calls AwardMailer’s
deliver_html_certificate ...