send_message decoded the message body with utf-8/errors="replace",
corrupting 8-bit content before forwarding. Pass the raw bytes straight
to smtp.sendmail so the message is relayed unchanged.
Fixes#4
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Fix several POP3/IMAP proxy correctness defects:
- RETR returned an empty body because fetch_message kept only top-level
bytes from the imaplib FETCH response; extract the RFC822 literal from
the response tuple instead.
- DELE marks were wiped mid-session because STAT/LIST/UIDL refreshed the
mailbox and cleared the deleted set. Snapshot the UID list once at
authentication and keep the maildrop static for the session lifetime.
- RETR/TOP output now normalises line endings to CRLF, byte-stuffs lines
beginning with ".", and emits the terminating ".\r\n" per RFC 1939.
- STAT/LIST batch message sizes via a single threaded UID FETCH and the
IMAP client now uses a 30s socket timeout, keeping blocking work off the
event loop.
- Implement the POP3 TOP command (headers plus first n body lines).
Fixes#1Fixes#2Fixes#3Fixes#5Fixes#6
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>