BigBinary Blog

We write about Ruby on Rails, React.js, React Native, remote work, open source, engineering and design.

Rails 6 adds ActionMailer#email_address_with_name

This blog is part of our Rails 6 series.

Rails 6.0 was recently released.

When using ActionMailer::Base#mail, if we want to display name and email address of the user in email, we can pass a string in format "John Smith" <> in to, from or reply_to options.

Before Rails 6, we had to join name and email address using string interpolation as mentioned in Rails 5.2 Guides and shown below.

1  email_with_name = %("John Smith" <>)
2  mail(
3    to: email_with_name,
4    subject: 'Hey Rails 5.2!'
5  )

Problem with string interpolation is it doesn't escape unexpected special characters like quotes(") in the name.

Here's an example.

Rails 5.2

2irb(main):001:0> %("John P Smith" <>)
3=> "\"John P Smith\" <>"
5irb(main):002:0> %('John "P" Smith' <>)
6=> "'John \"P\" Smith' <>"

Rails 6 adds ActionMailer::Base#email_address_with_name to join name and email address in the format "John Smith" <> and take care of escaping special characters.

Rails 6.1.0.alpha

2irb(main):001:0> ActionMailer::Base.email_address_with_name("", "John P Smith")
3=> "John P Smith <>"
5irb(main):002:0> ActionMailer::Base.email_address_with_name("", 'John "P" Smith')
6=> "\"John \\\"P\\\" Smith\" <>"
2to: email_address_with_name("", "John Smith"),
3subject: 'Hey Rails 6!'

Here's the relevant pull request for this change.

Taha Husain in Rails 6
October 22, 2019

Subscribe to our newsletter