An [RFC 2822] parser.
Currently, this crate only recognizes the RFC 2822 and [addr-spec] productions, i.e., things of the form:
Name (Comment) <email@example.org>
and
email@example.org
Although the above appear simple to parse, [RFC 2822]'s whitespace and comment rules are rather complex. This crate implements the whole grammar.
As an extension, in addition to ASCII, we also recognize all UTF-8
code points. NUL, controls, and specials retain their meaning as
defined in RFC 2822. Other UTF-8 code points are considered to be
text like a
.
Further, we also allow dots (.
) and at symbols (@
) in the atom
production. That is, the atom
production is extended from:
atom = [CFWS] 1*atext [CFWS]
to:
atom = [CFWS] 1*atext_or_dot_or_at [CFWS]
atext_or_dot_or_at = atext | DOT | AT
And, as such:
Professor Pippy P. Poopypants <pippy@jerome-horwitz.k12.oh.us>
is recognized as a name-addr
even though [RFC 2822] strictly
requires that the display-name
be quoted like:
"Professor Pippy P. Poopypants" <pippy@jerome-horwitz.k12.oh.us>
Likewise,
foo@bar.com <foo@bar.com>
is recognized as a name-addr
even though the @
should be quoted.
This crate does not (yet) implement the new [RFC 5322].