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.