Introduction
       ------------------------------------------------------------
       
       flimflam is an email address validation library written in
       Clojure. It tests if a given email address conforms to the
       addr-spec specification as described in RFC 5322[1].
       
       
       Installation
       ------------------------------------------------------------
       
       This library can be installed from Clojars [2].
       
       Leiningen/Boot
       --------------
       
       [de.dixieflatline/flimflam "0.1.0-SNAPSHOT"]
       
       
       Quick overview
       ------------------------------------------------------------
       
       local-part
       ----------
       
       The locally interpreted string is either a quoted-string or a
       dot-atom. If quoted, it may contain whitespace and quoted
       (control) characters. flimflam doesn't support obsolete syntax
       (obs-local-part).
       
       The following strings are valid email addresses:
       
         * "John.Doe@example.org"
         * "(nested (comment))John.Doe@example.org"
         * "\"John\r\n Doe\"@example.org"
         * "\"John@Doe\"@example.org"
         * "\"\"@example.org"
       
       
       domain
       ------
       
       The domain must be a hostname, a list of dot-separated (DNS)
       labels (see RFC 952[3], RFC 1035[4] and RFC 1123[5]) or an IP
       address. Labels must not consist of all numeric values. IPv6
       addresses with zone index (e.g. fe80::3dd0:7f8e:57b7:34d5%19)
       are not supported.
       
       The following strings are valid email addresses:
       
         * "john.doe@(comment)\r\n localhost"
         * "john.doe@example.org."
         * "john.doe@[127.0.0.1]"
         * "john.doe@[IPv6:2001:0db8::192.168.14.25]"
       
       
       Validation
       ----------
       
       flimflam.core/valid? and flimflam.core/invalid? test if an
       email address conforms to the addr-spec specification.
       
         user=> (require '[flimflam.core :as ff])
       
         user=> (ff/valid? "john.doe@[IPv6:::]")
         true
       
         user=> (ff/invalid? "@localhost")
         true
       
         
       Normalization
       -------------
       
        flimflam.core/normalize converts email addresses to a uniform
       format. It
         
         * removes unneccessary whitespace characters and comments.
         * removes enclosing quotation marks from local-part when possible.
         * normalizes IP addresses, hostnames and FQDNs.
         
       Folding white space that occurs inside quoted-strings is
       interpreted as a single space character.
       
       
         user=> (ff/normalize "john.doe@[IPv6:0000:0000:0000:0000:0000:0000:7f00:0001]")
         "john.doe@[IPv6:::7f00:0001]"
         
         user=> (ff/normalize "john.doe@[IPv6:::127.0.0.1]")
         "john.doe@[IPv6:::7f00:0001]"
         
         user=> (ff/normalize "john.doe@ExAmPlE.ORG.")
         "john.doe@example.org"
         
         user=> (ff/normalize "john.doe@(hello world)example.org")
         "john.doe@example.org"
         
         user=> (ff/normalize "john.doe   @example.org")
         "john.doe@example.org"
         
         user=> (ff/normalize "\"john\\.doe\"@example.org")
         "john.doe@example.org"
         
         user=> (ff/normalize "\"john\t\r\n   doe\"@example.org")
         "\"john doe\"@example.org"
       
       
       References
       ------------------------------------------------------------
 (HTM) [1]: RFC 5322
 (HTM) [2]: Clojars
 (HTM) [3]: RFC 952
 (HTM) [4]: RFC 1035
 (HTM) [5]: RFC 1123
       
       
       Links
       ------------------------------------------------------------
 (BIN) main.zip
 (HTM) GitHub