EmailAddress (email_address v1.0.1)

EmailAddress provides top-level parsing & formatting API to deal with RFC5322-formatted e-mail addresses and (in the future) lists of e-mail addresses.

This library is meant to be very forgiving and deal with invalid / malformed e-mail addresses in a fashion allowing for a recovery and avoiding common errors that happen when clients send malformed emails.

Summary

Functions

Given EmailAddress.Address struct return RFC5322-formatted String containing e-mail address.

Given string containing single e-mail address, return EmailAddress.Address struct containing addr_spec and display_name fields or nil if address could not be parsed.

Functions

Link to this function

format(address)

Given EmailAddress.Address struct return RFC5322-formatted String containing e-mail address.

This function performs escaping and quoting special characters found in display_name if and only if required, leaving display_name unquoted in cases when it's not necessary.

Examples

iex> EmailAddress.format(%EmailAddress.Address{addr_spec: "jack.black@example.com", display_name: ""})
"jack.black@example.com"

iex> EmailAddress.format(%EmailAddress.Address{addr_spec: "jack.black@example.com", display_name: "Jack Black"})
"Jack Black <jack.black@example.com>"

iex> EmailAddress.format(%EmailAddress.Address{addr_spec: "jack.black@example.com", display_name: "Jack Black's Email"})
"Jack Black's Email <jack.black@example.com>"

iex> EmailAddress.format(%EmailAddress.Address{addr_spec: "jack.black@example.com", display_name: "Jack <Black's> Email"})
"\"Jack <Black's> Email\" <jack.black@example.com>"

iex> EmailAddress.format(%EmailAddress.Address{addr_spec: "jack.black@example.com", display_name: "jack.black@example.com"})
"\"jack.black@example.com\" <jack.black@example.com>"

iex> EmailAddress.format(%EmailAddress.Address{addr_spec: "jack.black@example.com", display_name: "Jack Black\""})
"\"Jack Black\\\"\" <jack.black@example.com>"

iex> EmailAddress.format(%EmailAddress.Address{addr_spec: "jack.black@example.com", display_name: "Black, Jack"})
"\"Black, Jack\" <jack.black@example.com>"

Given string containing single e-mail address, return EmailAddress.Address struct containing addr_spec and display_name fields or nil if address could not be parsed.

Examples

iex> EmailAddress.parse("jack.black@example.com")
%EmailAddress.Address{addr_spec: "jack.black@example.com", display_name: ""}

iex> EmailAddress.parse("Jack Black <jack.black@example.com>")
%EmailAddress.Address{addr_spec: "jack.black@example.com", display_name: "Jack Black"}

iex> EmailAddress.parse("\"Jack@Black\" <jack.black@example.com>")
%EmailAddress.Address{addr_spec: "jack.black@example.com", display_name: "Jack@Black"}

iex> EmailAddress.parse("Jack Black jack.black@example.com")
%EmailAddress.Address{addr_spec: "jack.black@example.com", display_name: "Jack Black"}

iex> EmailAddress.parse("Jack\n\rBlack\tjack.black@example.com")
%EmailAddress.Address{addr_spec: "jack.black@example.com", display_name: "Jack Black"}

iex> EmailAddress.parse("\"Jack@Black\" <jack.black@example.com> ")
%EmailAddress.Address{addr_spec: "jack.black@example.com", display_name: "Jack@Black"}

iex> EmailAddress.parse("")
nil

iex> EmailAddress.parse("Not an email")
nil

iex> EmailAddress.parse("http://example.com")
nil

iex> EmailAddress.parse("notanemail")
nil

iex> EmailAddress.parse("<notanemail>")
nil

iex> EmailAddress.parse("Not an email <notanemail>")
nil

iex> EmailAddress.parse("Jack Black jack.black@example.com>")
%EmailAddress.Address{addr_spec: "jack.black@example.com", display_name: "Jack Black"}

iex> EmailAddress.parse("Jack Black\" jack.black@example.com>")
%EmailAddress.Address{addr_spec: "jack.black@example.com", display_name: "Jack Black\""}

iex> EmailAddress.parse("Jack.black@example.com jack.black@example.com")
%EmailAddress.Address{addr_spec: "jack.black@example.com", display_name: "Jack.black@example.com"}

iex> EmailAddress.parse("Jack.black@example.com jack.black@example.com;,:")
%EmailAddress.Address{addr_spec: "jack.black@example.com", display_name: "Jack.black@example.com"}

iex> EmailAddress.parse("Hubert Łępicki <hubert.łępicki@hubertłępicki.com>")
%EmailAddress.Address{addr_spec: "hubert.łępicki@hubertłępicki.com", display_name: "Hubert Łępicki"}

iex> EmailAddress.parse("Hubert Łępicki <hubert.łępicki@hubertłępicki.com>")
%EmailAddress.Address{addr_spec: "hubert.łępicki@hubertłępicki.com", display_name: "Hubert Łępicki"}

iex> EmailAddress.parse("client@example.com (Client Client)")
%EmailAddress.Address{addr_spec: "client@example.com", display_name: "Client Client"}

iex> EmailAddress.parse("\"Black, Jack\" <jack.black@example.com>")
%EmailAddress.Address{addr_spec: "jack.black@example.com", display_name: "Black, Jack"}

iex> EmailAddress.parse("\"Black, Jack\" <jack.black@127.0.0.1>")
%EmailAddress.Address{addr_spec: "jack.black@127.0.0.1", display_name: "Black, Jack"}

iex> EmailAddress.parse("\"=?UTF-8?Q?Tesorer=C3=ADa?=\" <user@u-oerre.md>")
%EmailAddress.Address{addr_spec: "user@u-oerre.md", display_name: "=?UTF-8?Q?Tesorer=C3=ADa?="}