package sendmail

  1. Overview
  2. Docs
Implementation of the sendmail command

Install

Dune Dependency

Authors

Maintainers

Sources

colombe-v0.5.0.tbz
sha256=7f498367e75bdc4faaf44060a432f801299363159f3212082de57cb9ac46130a
sha512=caebd96bfc4ec084d9d19ee025edb51f9b52a902205fe80fc2abbd6428b02cc07af769ce5a414e36cef169161320483536bc9984efe600bc6a8d1c6d07d5c6fd

Description

A library to be able to send an email.

Published: 05 Sep 2021

README

Colombe - an implementation of SMTP protocol in OCaml

colombe is a little library which wants to implement the SMTP protocol according RFC5321. It is a low-level library used by some others projects to implements clients or servers.

The library does not handle properly an email. If you want to generate a proper email or introspect an email, you should be interested by mrmime.

As a client

The distribution provides sendmail, sendmail.starttls and sendmail-lwt which are respectively:

  • An agnostic (to the system) implementation of an usual client with authentication

  • An agnostic (to the system) implementation of an usual client with authentication and STARTTLS extension

  • An LWT implementation of an usual client with authentication

Depending on your context:

  • If you want to communicate with a SMTP server which require a TLS connection (like, *:465), sendmail with a scheduler such as LWT or ASYNC (or UNIX) should be use. sendmail-lwt is a specialization with LWT.

  • If you want to communicate with a SMTP server which handles (and surely requires) STARTTLS extension, (like *:587), sendmail.starttls with a scheduler should be use.

Of course, a client can be more complex and can handle:

  • file attachments

  • a well formed email

  • some usual metadata such as the timezone

If you are interested by that, you should look into facteur which wants to provide a little binary to send an email with a nice use between colombe, mrmime and some others MirageOS projects.

As a server

Of course, colombe implements both sides. By this library, you are able to implement an SMTP server - if you are interested by that, you should look into ptt.

How to use colombe

As we said, the library wants to be a low-level one. At least, the core does not handle properly eSMTP extensions or any high mechanisms such the authentication. It's mostly because the library wants to be used by a server implementation and a client implementation.

It only ensures a high abstracted interface on top of the low-level of the communication. The library defines only few parts of the SMTP protocol and a monadic interface to describe the state-machine while the communication with an other peer.

sendmail is a good example about how to use colombe. It describes structurally the SMTP protocol (only what it really needs) and the state machine to send an email.

Received field

RFC5321 describes the SMTP protocols and some mechanisms such as the Received: field. The distribution provides a way to introspect Received: fields (and can produce a graph of them) or generate them from a server configuration.

Dependencies (7)

  1. cstruct >= "6.0.0"
  2. logs
  3. base64 >= "3.0.0"
  4. tls >= "0.13.0" & < "0.17.4"
  5. colombe = version
  6. dune >= "2.0"
  7. ocaml >= "4.03.0"

Dev Dependencies (3)

  1. alcotest with-test
  2. mrmime >= "0.3.2" & < "0.6.0" & with-test
  3. emile >= "0.8" & with-test

Used by (2)

  1. letters >= "0.2.1" & < "0.3.3"
  2. sendmail-lwt = "0.5.0"

Conflicts

None

OCaml

Innovation. Community. Security.