725bd460a5abbaf9b559ba942bbe945d85f0be51
arcline-email
A self-hosted mail server written in Go. Handles inbound and outbound SMTP, IMAP access, DKIM signing, and SPF/DMARC verification — no third-party relay required.
Status
Early development. Not production-ready.
Goals
- Full SMTP server (inbound on port 25, submission on 587/465)
- IMAP server (143/993) for client access
- Maildir-based message storage
- Username/password authentication with SASL
- TLS on all listeners (Let's Encrypt or bring-your-own cert)
- DKIM signing for outbound mail
- SPF and DMARC verification for inbound mail
- Outbound routing via MX DNS lookup
- Admin API for managing domains, mailboxes, and aliases
Non-Goals (for now)
- Webmail UI
- Anti-spam scoring engine (may integrate rspamd via milter later)
- Multi-server clustering
Tech Stack
- Language: Go 1.22+
- SMTP:
emersion/go-smtp - IMAP:
emersion/go-imap - Mail parsing:
emersion/go-message - SASL:
emersion/go-sasl - Storage: Maildir (filesystem)
- Config: TOML
Project Layout
arcline-email/
├── cmd/
│ └── arcline-email/ — main entry point
├── internal/
│ ├── smtp/ — SMTP server (inbound + submission)
│ ├── imap/ — IMAP server
│ ├── storage/ — Maildir storage layer
│ ├── auth/ — user authentication
│ ├── dkim/ — DKIM signing and verification
│ ├── spf/ — SPF checking
│ ├── dmarc/ — DMARC policy enforcement
│ └── admin/ — admin API
├── config/ — config parsing and validation
├── docs/ — protocol notes, architecture docs
├── todo.md
├── CONTRIBUTING.md
├── LICENSE
└── README.md
Building
go build ./cmd/arcline-email
Running
./arcline-email --config /etc/arcline-email/config.toml
Configuration
See docs/config.md (coming soon).
License
MIT. See LICENSE.
Description
Languages
Go
100%