A domain can be constructed in several ways. The most common way is:
let isomorphism = Domain.(v domain [ a "isomorphis"; a "me" ]) ;;
val isomorphism : domain = `Domain ["isomorphis"; "me"]
Domain.to_string isomorphism ;;
- : string = "isomorphis.me"
You can specify an IP (v4 or v6) address like:
let localhost = Domain.(v ipv4 Ipaddr.V4.localhost) ;;
val localhost : domain = `Addr (IPv4 127.0.0.1)
Domain.to_string localhost ;;
- : string = "[127.0.0.1]"
At the end, and according RFC 5322, it's possible to specify a `Literal
domain like this:
let x25519 = Domain.(v literal "x25519") ;;
val x25519 : domain = `Literal "x25519"
Domain.to_string x25519 ;;
- : string = "[x25519]"
However, this last kind conforms only RFC 5322 - RFC 5321 (SMTP protocol) does not recognize this kind of domain.
type atom = [
| `Atom of string
]
type literal = [
| `Literal of string
]
Kind of domain. RFC 5322 and RFC 5321 allows several kinds of domain:
An usual domain
which is a non-empty list of atom
elements A Literal_domain.t
A `Literal
domain which is a string surrounded by brackets. val atom : string -> (atom , [> `Msg of string ] ) result
atom x
returns a safe atom
element. If x
does not respect RFC 5322, it returns Error
. It accepts any characters excepts controls, space and specials characters - for instance, brackets are not allowed.
val atom_exn : string -> atom
Same as atom
but raises an Invalid_argument
instead Error
.
literal x
returns a literal
domain. If x
does not respect RFC 5321, it returns Error
. It will try to escape control characters (with escape_string
).
val literal_exn : string -> literal
Same as literal
but raises an Invalid_argument
instead to return Error
.
val extension : (string * string) t
of_list l
returns a domain from a non-empty list of well-formed atom elements. Otherwise, it returns an error.
Same as make
but raises an Invalid_argument
instead Error
.
to_string x
returns a string which represents x
as is it in a e-mails.