Derive the Docker tag from the crate version when building on the
main branch and fall back to the short commit SHA on any other
branch. Update the run, clean, shell and push targets to use the
same tag instead of the implicit latest tag.
Pin the toolchain to Rust 1.98 via rust-toolchain.toml and bump the
builder image to rust:1.98-trixie. Move the runtime image from Debian
bookworm to trixie, replacing libssl3 with libssl3t64 which is the
OpenSSL runtime package name in trixie.
Bump clap to 4.6.6, imap to 3.0.0-alpha.15 and native-tls to 0.2.18.
The imap upgrade removes the unsound lexical-core 0.7.6 dependency
inherited via nom 5 (RUSTSEC-2023-0086), leaving cargo audit clean.
Drop the unused imap-proto dependency and migrate to the imap 3.x
ClientBuilder and AppendCmd APIs.
Replace third-party POP3 client with a custom implementation using
native-tls for direct TLS socket communication. This change ensures
email messages are retrieved as raw bytes without encoding conversions
that could corrupt email data.
Key improvements:
- Direct byte-level message retrieval preserves original email structure
- Proper handling of POP3 byte-stuffing (doubled leading dots)
- Eliminates dependency on rust-pop3-client which performed unwanted
string conversions and line ending modifications
- Uses only native-tls for TLS connections (already a project dependency)
- Detect X-WS-* headers (e.g., X-WS-Attachment-UUID) as MIME headers
to ensure attachment headers like Content-Type and Content-Disposition
get normalized properly
- Add test case for attachment header normalization
- Bump version to 0.5.0
The normalization fixes malformed continuation lines in attachment
headers generated by Infomaniak webmail, where lines like
"name=file.pdf" are missing the required leading whitespace.
- Copy Cargo files first to leverage Docker layer caching
- Build dependencies separately before copying source code
- Use cache mounts for cargo registry to speed up builds
- Fix binary path in final stage from cargo bin to target release