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])
  end

If the checkbox was checked, the user wants rich text, and so the controller calls AwardMailer’s deliver_html_certificate ...

Get Learning Rails: Live Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.