Our Personal Data Server from scratch! tranquil.farm

Outgoing mail is missing `MIME-Version` which trips common spam filters on MISSING_MIME_VERSION #135

Closed nel.pet
Closed opened by nel.pet

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.

Sign up or Sign in to add to the discussion.