Every mail Tranquil sends sets Content-Type and Content-Transfer-Encoding but never MIME-Version, which RFC 2045 requires whenever those are present.
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
Date: Tue, 01 Sep 2026 11:40:14 +0000
Spam filters penalizes this: Stalwart scores MISSING_MIME_VERSION at 2.00, a significant hit on what is otherwise ordinary transactional mail.
The cause is in message.rs, which builds the message and ends with .body(...). In lettre, body() sets Content-Transfer-Encoding but never calls mime_1_0(), while singlepart() and multipart() both do.
This is not transport specific. message::build() runs before transport::dispatch(), so smarthost and direct MX both send the same message.
A potential fix is either using .singlepart(SinglePart::plain(body)) instead of .header(ContentType::TEXT_PLAIN) + .body(body), or adding .header(header::MIME_VERSION_1_0) explicitly.
I have opened a PR #264 to set
MIME-Version: 1.0, let me know if this is what you were looking for or I'd be happy to withdraw my PR if project lead settles on a different solution. Meow.