Skip to content
& images
OCaml
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
lib
test
.gitignore
.ocamlformat
.travis.yml
CHANGES.md
LICENSE.md
README.md
dune-project
emile.opam

README.md

Emile (& Images)

Build Status MirageOS

Emile is a library to parse an e-mail address in OCaml. This project is an extraction of MrMime - but we use Angstrom instead of an internal decoder.

This implementation follow some RFCs:

We handle UTF-8 (RFC 6532), domain defined on the SMTP protocol (RFC 5321), and general e-mail address purpose (RFC 822, RFC 2822, RFC 5322) including folding-whitespace.

The last means we can parse something like:

A Group(Some people)
   :Chris Jones <c@(Chris's host.)public.example>,
     joe@example.org,
 John <jdoe@one.test> (my dear friend); (the end of the group)"

For a general purpose, it's not needed and is close e-mail purpose.

Then, for domain part (explained on RFC 5321 - SMTP protocol), we handle this kind of domain:

first.last@[12.34.56.78]
first.last@[IPv6:1111:2222:3333::4444:12.34.56.78]

The parser of IPv* is done by Ipaddr. As a old specification, we handle multiple-domains like:

<@a.com,b.com:john@doe.com>

Obviously, we handle (nested) comments:

a(a(b(c)d(e(f))g)h(i)j)@iana.org

All parsers are binded with a comment which explain where you can find the ABNF description and some notes about implementation. All was check by hands.

Advise

If you think it's easy to parse an e-mail address, you should look tests.

You can’t perform that action at this time.