Skip to content
This repository has been archived by the owner on Jan 6, 2023. It is now read-only.


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

mailproxy - POP/SMTP to Katzenpost proxy server

This is a implementation of a proxy server that exposes a POP/SMTP interface to Katzenpost based mix networks. It is intended to run on a user's localhost to allow standard mail clients to send and receive mail over the mixnet.


Requires golang 1.11 or later. Dependencies pinned using go-modules. For more info about go-modules, see:

Build the mix server like this:

export GO111MODULE=on
cd cmd/mailproxy
go build

Basic Usage

Mailproxy can generate the keys, configuration file and perform the registration via HTTP all in one call using the -r option:

./mailproxy -r -authority -authorityKey "o4w1Nyj/nKNwho5SWfAIfh7SMU8FRx52nMHGgYsMHqQ=" -registrationAddr -registrationWithoutHttps -provider provider1 -providerKey "2krwfNDfbakZCSTUUZYKXwdduzlEgS9Jfwm7eyZ0sCg=" -account alice

The daemon can then be run using:

./mailproxy -f ~/.mailproxy/mailproxy.toml

Now you can either set up any mail client or use swaks and curl. Sending test messages with swaks:

swaks --from alice@provider1 --to bob@provider2 --server

Listing the inbox and receiving the first message with:

curl --user alice@provider1:pw pop3://
curl --user alice@provider1:pw pop3://

Manual Registration

In case HTTP registration is not available the user needs to be created at the provider using the management socket.

socat unix:/<path-to-data-dir>/management_sock STDOUT
ADD_USER alice X25519_link_public_key_in_hex_or_base64
SET_USER_IDENTITY alice X25519_identity_public_key_in_hex_or_base64

The keys can be found in the mailproxy data dir (default is ~/.mailproxy) as 'link.public.pem' and 'identity.public.pem' respectively.


Yawning Angel (yawning at schwanenlied dot me)


AGPL: see LICENSE file for details.

supported by

This project has received funding from the European Union’s Horizon 2020 research and innovation programme under the Grant Agreement No 653497, Privacy and Accountability in Networks via Optimized Randomized Mix-nets (Panoramix).