olden-mail
olden-mail is an IMAP & SMTP proxy that allows you to connect to SSL
enabled mail servers using insecure plaintext connections.
This is of course very insecure, but it's intended to allow vintage computers that don't have SSL capability or ther right ciphers to still be used for e-mail.
Installation
Pre-built binaries and packages
Binaries are available for macos and linux, for both aarch64 and x86_64
from https://build.r.bdr.sh/olden-mail, including .deb and .rpm
packages.
Homebrew
You can also install this on macos via homebrew.
% brew tap rbdr/apps git@git.sr.ht:~rbdr/homebrew-apps
% brew install rbdr/apps/olden-mail
From source
You can run make for a debug build, or make -e profile=release for a
release build.
Usage
The proxy requires you to set environment variables, but otherwise takes no options.
LOCAL_IMAP_PORTu16, the port in which the server will listen for IMAP clients. Defaults to 143.LOCAL_IMAP_BIND_ADDRESSString, the address on which to listen for IMAP clients. Defaults to 0.0.0.0.REMOTE_IMAP_PORTu16, the port to which the server will forward the IMAP messages. Defaults to 993.-
REMOTE_IMAP_HOSTString, the host to which the server will forward the IMAP messages. Required. -
LOCAL_SMTP_PORTu16, the port in which the server will listen for SMTP clients. Defaults to 25. LOCAL_SMTP_BIND_ADDRESSString, the address on which to listen for SMTP clients. Defaults to 0.0.0.0.REMOTE_SMTP_PORTu16, the port to which the server will forward the SMTP messages. Defaults to 465.REMOTE_SMTP_HOSTString, the host to which the server will forward the SMTP messages. Required.
This means the minimum invocation is this (Shown here with inline environment variables)
% REMOTE_IMAP_HOST=imap.coolmailsite.example REMOTE_SMTP_HOST=smtp.coolmailsite.example olden-mail
Middleware
In order to work with some older clients, middleware allow transformation of messages. The current middleware are:
FindMailboxesCompatibility- Transforms IMAPv3 FIND MAILBOX commands to IMAPv4 LIST commands.
Debugging
You can control how much it prints by setting RUST_LOG. Setting it to
debug will output the whole protocol stream. The default level is
info.
Messages coming from the client are prefixed with >>>, and messages coming
from the server with <<<. If a middleware modified a command, you'll see
the message that was actually sent prefixed with ###.