High-Level Architecture Overview

Code layout

  • smtp-message handles the SMTP protocol, at the parsing and serialization level.

  • smtp-server exposes an interact function, that semantically takes in a configuration and a client with which it's going to interact, and handles the SMTP interaction with this single client.

  • smtp-queue runs a queue for use by SMTP servers, delegating to a storage handler and a transport for sending messages that have reached their scheduled time for sending.

  • smtp-queue-fs implements a storage handler for smtp-queue that relies on the filesystem.

Not yet implemented

  • smtp-client relays emails to external email servers.

  • kannader exposes the API of all above crates to consumers an an more opinionated way.

  • kannader-bin interacts with API with hooks, so that changing the configuration does not require rebuilding the whole server — see the configuration format chapter for more details