MailAddress Build Status Coverage Status Scrutinizer Code Quality

MailAddress is a port of Mail::Address from Perl.

mail is a great gem library. But some email addresses are unparsable with it. In perl, Mail::Address is a very common library to parse email addresses. Mail::Address conviniently can parse even non-RFC-compliant email addresses such as:

# mail gem cannot parse the following addresses
Ello [Do Not Reply] <[email protected]> # [, ] are not permitted according to RFC5322
大阪 太郎<[email protected]> # no whitespace just before `<`

But Mail::Address(Perl) has some bad points (below). These are fixed in MailAddress.

  • if no ending parenthesis in name part, cannot parse correctly.
  • Modifications of name part are too much.

Many people copy and paste email addresses from Excel or the other spreadsheets. In this case, addresses are separated by whitespace(tab or space). To enable to parse this, also ported from a parser part of Google Closure Library.

Installation

Add this line to your application's Gemfile:

gem 'mail_address'

And then execute:

$ bundle

Or install it yourself as:

$ gem install mail_address

Usage

It's almost the same as Mail::Address(Perl). But in this module, removed comment property from address class in version v1.0.0. Most people don't realize comment I think.

require 'mail_address'

line = "John 'M' Doe <[email protected]> (this is a comment), 大阪 太郎 <[email protected]>"
addrs = MailAddress.parse(line)

p addrs[0].format     # "\"John 'M' Doe (this is a comment)\" <[email protected]>"
p addrs[0].address    # "[email protected]"
p addrs[0].name       # "John 'M' Doe (this is a comment)"
p addrs[0].phrase     # "John 'M' Doe (this is a comment)"
p addrs[0].host       # "example.com"
p addrs[0].user       # "john"
p addrs[0].original   # "John 'M' Doe <[email protected]> (this is a comment)"

p addrs[1].format     # "\"大阪 太郎\" <[email protected]>"
p addrs[1].address    # "[email protected]"
p addrs[1].name       # "大阪 太郎"
p addrs[1].phrase     # "大阪 太郎"
p addrs[1].host       # "example.jp"
p addrs[1].user       # "osaka"
p addrs[1].original   # "大阪 太郎 <[email protected]>"

address.name and address.phrase are almost same. address.phrase keeps outermost double quotes or parentheses.

if you specify single email address, you can use parse_first.

line = "John Doe <[email protected]>"
addr = MailAddress.parse_first(line)

p addr.address # "[email protected]"

Parse addresses separated with whitespace

require 'mail_address'

line = "John Doe <[email protected]> [email protected], [email protected]" # separated with space and comma
addrs = MailAddress.parse_simple(line)

Contributing

  1. Fork it ( https://github.com/[my-github-username]/mail_address/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request