Skip to content

rsesek/mailpopbox

Repository files navigation

mailpopbox

Mailpopbox is a single-user mail server with SMTP and POP facilities. Its purpose is to provide privacy through anonymity by acting as a catch-all, wildcard email server for an entire domain name. Any message addressed to an account at the configured domain will be deposited into a single mailbox, which can then be accessed using the POP3 protocol.

The usage scenario is to configure your primary email provider (e.g., Gmail) or client to POP messages off the server. Any time you need to provide an email address, you can give out arbitrary-string@domain.com, allowing you to use site/service/person-specific email addresses. Mail is collected into a single maildrop that can be POP'd out into your normal mailbox.

Send-As SMTP

Mailpopbox also provides a way to reply to messages from an arbitrary email address at the domain. Since mailpopbox is designed as a catch-all mail server, it would be impractical to administer SMTP accounts to enable replying from any address handled by the server. Instead, the SMTP authenticates a single mailbox user, and if the message's Subject header has a special [sendas:ADDRESS] string, the server will alter the From message header to be from ADDRESS@DOMAIN.

Installation

Installation requires a server capable of binding on port 25 for SMTP and 995 for POP3. A TLS certificate is also required to have a secure connection for authenticating to the server. See the installation guide for a full set of steps.

Building

Building mailpopbox only requires Go and git. Clone the repository and type go build. Cross-compilation is supported since the server is written in pure Go.

Contributing

CI

The canonical home for the repository is on src.bluestatic.org, but it is also hosted on Github to enable collaboration.

Issues should be reported on the Github issue tracker.

Contributions are welcome. Please:

  • Ensure tests pass and that new changes have adequate code coverage (make coverage)
  • Code is formatted with go fmt
  • Commit history is clean (one logical change per commit)
  • Commit message is well-formatted

RFCs

This server implements (partially) the following RFCs: