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 ...

Get Learning Rails 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.