package emile

Build not checked
  1. Overview
  2. Docs
[Images](https://youtube.com/watch?v=S70NaQqAfaw))

Install

dune-project
 Dependency

Authors

Maintainers

Sources

emile-0.3.tbz
sha256=8a560f3c030e241c1a09deb3da179f37257c905ad03d2dd67bfd48172470c793
md5=57c23427a11e5ac5a2e37f9b21477b0b

Description

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 an internal decoder.

This implementation follow some RFCs:

  • RFC 822
  • RFC 2822
  • RFC 5321 (domain part)
  • RFC 5322
  • RFC 6532

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 6532 - 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 hand.

Added to opam-repository:

README

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 an internal decoder.

This implementation follow some RFCs:

  • RFC 822
  • RFC 2822
  • RFC 5321 (domain part)
  • RFC 5322
  • RFC 6532

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 6532 - 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 hand.

Dependencies (6)

  1. fmt >= "0.8.0"
  2. uutf >= "1.0.0"
  3. ipaddr >= "2.7.0"
  4. angstrom >= "0.9.0" & < "0.14.0"
  5. jbuilder >= "1.0+beta9"
  6. ocaml >= "4.03.0"

Dev Dependencies (1)

  1. alcotest with-test

Optional Dependencies

None

Used by (2)

  1. colombe >= "0.13.0"
  2. letters = "0.1.1"

Conflicts

None

Build status

Results of building emile with each compiler on check.ci.ocaml.org, run of against opam-repository 78c202b. All results for this package.

Each result links to its build log. To keep crawlers from overloading the site, build logs require a GitHub sign-in (see ocurrent/opam-health-check). On your first log, GitHub asks you to “Authorize opam-health-check”, the OCurrent app that runs these checks; it sees only your public profile, not your repositories. The sign-in lasts 30 days.

This version is not in the latest run; the versions below are.

Version OCaml 4.11 OCaml 4.14 OCaml 5.2 OCaml 5.4 OCaml 5.5
1.1 good good good good good
  • good Package successfully built
  • partial One of the dependencies failed to build
  • bad Package failed to build
  • n/a Package is not available in this environment
  • internal Internal failure