# maitred Lightweight embeddable SMTP [RFC5321](https://www.rfc-editor.org/rfc/rfc5321.html) server for use in applications that need to receive e-mail. ## Use Case The original goal of this library is to have a usable SMTP server that can be embedded in mailing list software, particularly for use in [Ayllu](https://ayllu-forge.org) and [Mailpot](https://git.meli-email.org/meli/mailpot). After considering all of the existing SMTP servers there was no Rust library that could be easily embedded in an application and general purpose SMTP servers like Postfix are too complex to be reasonably packaged. ## Security ### Relaying Due to the common abuse of the SMTP protocol by nefarious internet actors the default behavior of this package must _never_ allow open relaying without explicit and conscious configuration from the user. Additionally the SMTP server must never expose the e-mail addresses or other user data contained within. ## Alpha Status This library is in an "alpha" state currently and should not be considered stable until it reaches version `1.0`, use at your own risk! ## Protocol Status ### SMTP Base server and Commands [RFC5321](rfcs/rfc5321.txt) | Name | Status | Notes | |-----------|--------|-------------------------------------------------------| | HELO | ✅ | | | EHLO | ✅ | | | MAIL | ✅ | | | RCPT | ✅ | | | BDAT | ✅ | | | DATA | ✅ | | | AUTH | ✅ | SASL PLAIN only | | VRFY | ✅ | | | EXPN | ✅ | | | STARTTLS | ✅ | | ### ESMTP Extensions | Name | Status | RFC | |-----------------------|----------|-------------------------------| | SIZE | ✅ | [RFC1870](rfcs/rfc1870.txt) | | PIPELINING | ✅ | [RFC2920](rfcs/rfc2920.txt) | | 8BITMIME | ✅ | [RFC6152](rfcs/rfc6152.txt) | | ENHANCED STATUS CODES | ⚠️ | [RFC2920](rfcs/rfc3463.txt) | | SMTPUTF8 | TODO | [RFC6531](rfcs/rfc6531.txt) | | CHUNKING | ✅ | [RFC3030](rfcs/rfc3030.txt) | | DSN | TODO | [RFC3461](rfcs/rfc3461.txt) | | ETRN | ❌ | [RFC1985](rfcs/rfc1985.txt) | | ATRN | ❌ | RFC2645 | | BURL | ❌ | RFC4468 | | REQUIRETLS | TODO | [RFC8689](rfcs/rfc8689.txt) | ### Authentication Extensions All authentication extensions are implemented with the [mail-auth](https://crates.io/crates/mail-auth) package from Stalwart. |name | status | |---------------------------|--------| | DKIM Verification | ✅ | | ARC Chain Verification | TODO | | SPF Policy Evaluation | ✅ | | DMARC Policy Evaluation | TODO | ### TLS Configuration STARTTLS is supported for upgrading plain text connections (opportunistic TLS). Implicit TLS on a dedicated port is a WIP. ### Proxy Protocol Often times you don't want to bind directly to privileged port `25`. Maitred provdes support for HAProxy's [PROXY protocol](https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt) which lets you proxy traffic from Nginx (or HAProxy) and expose the client's original source IP address. This is required for SPF session level validation. ## Attributions Several of the free software libraries released by [stalwart](https://github.com/stalwartlabs/mail-server) are in use here.