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
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>"
parse(string)
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?="}