Surprise, today’s blog posting is a double header!
Testing email can be painful, verifying delivery and look and feel quickly becomes tedious. mailcatcher and mail_view are my go-to tools for dealing with email.
mailcatcher
With mailcatcher, you install the gem and then run the mailcatcher binary to start the mailcatcher daemon in the background. Now you have an SMTP server running on port 1025 and an inbox available at http://localhost:1080. I configured The Clymb Rails app to automatically use mailcatcher if it’s running:
# config/initializers/email.rb begin sock = TCPSocket.new("localhost", 1025) sock.close catcher = true rescue catcher = false end ActionMailer::Base.smtp_settings = if Rails.env.development? && catcher { :host => "localhost", :port => '1025', } else { } # normal SMTP config end
Now you can test email via http://localhost:1080 and not have to use gmail, hotmail, etc.
mail_view
mail_view is awesome for rapidly testing UI changes in email. The trick is to render the email as a webpage directly in your Rails app so you can see changes immediately with Cmd+R just like any normal webpage. You just need to set up the email to be rendered with some data; in our case we just pull random data from the database since we all work with production database snapshots.
class Preview < MailView def order_receipt cart = Cart.where(:state => 'pushed').order(:id).last Emails.order_receipt(cart.id) end end
Of course, we need to mount the mail_view engine itself:
# config/routes.rb mount MailPreview => 'mail_view' if Rails.env.development?
Now we can go to http://localhost:3000/mail_view/order_receipt and immediately see what our order_receipt email looks like, no email required!
With mailcatcher and mail_view at your side, email development and testing goes from tedious to stupendous! Tomorrow we’ll cover a gem designed to build better command line scripts in Ruby…
Letter Opener by Ryan Bates https://github.com/ryanb/letter_opener
Pingback: Port Ping [PERL] « Cygnus X-1 | random rantings from the black hole
Make sure you use this with something like Litmus to actually check the design of your HTML email templates. Many email clients only support a small subset of HTML and limit your ability to use CSS. Viewing them in just your browser can produce deceptive results.
A good online alternative for mailcatcher: mailtrap.io