emile

Parser of email address according RFC 822
README


Emile is a library to parse an e-mail address in OCaml. This project is an
extraction of mrmime.

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) without
folding-whitespace.

Folding whitespace

According RFC 822, an e-mail address into an e-mail can be splitted by a
folding-whitespace. However, this kind of form is not an usual case where user
mostly wants to parse input from a form (for example). At the end, emile is
not able to parse this kind of input:

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)"

However, a pre-process (like
unstrctrd) can fold input and give
you an usual output. emile can not be used into an e-mail context without this
kind of pre-process.

Domain

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

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

It's possible to notify multiple domains for one local-part like this:

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

It's a valid form according RFC 882.

Comments

Even if we don't handle the folding-whitespace, we are able to discard
comments.

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

Advise

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

Install
Published
24 Jan 2020
Sources
emile-v0.7.tbz
sha256=f084d5f6f27b327f17cbdccf27374a0d3dcaedd25e5ffa1611d0e7542a658c73
sha512=02619876d14abd9f986c9c86079b4258f15d2134692bff6b06a88b0a204d053972359234ed5071a748fcd796889d91c489edd2064762a326f2cb6f740e40d868
Dependencies
alcotest
with-test
fmt
>= "0.8.0"
uutf
>= "1.0.0"
bigstringaf
>= "0.2.0"
pecu
>= "0.3"
base64
>= "3.0.0"
ipaddr
>= "2.7.0"
angstrom
>= "0.10.0" & < "0.14.0"
dune
>= "1.0"
ocaml
>= "4.03.0"
Reverse Dependencies
letters
= "0.1.1"