Go-Guerrilla is a lightweight SMTP server written in Go, made for receiving large volumes of mail. It started as a project for GuerrillaMail.com which processes millions of emails every day, and needed a daemon with less bloat & written in a more memory-safe language that can take advantage of modern multi-core architectures.
The purpose of this daemon is to grab the email, save it, and disconnect as quickly as possible, essentially performing the services of a Mail Transfer Agent (MTA) without the sending functionality.
The software also includes a modular backend implementation, which can extend the email processing functionality to whatever needs you may require.
To be used as a package in your Go project, or as a stand-alone daemon by running the
Key Features :
- Multi-server. Can spawn multiple servers, all sharing the same backend for saving email.
- Config hot-reloading. Add/Remove/Enable/Disable servers without restarting. Reload TLS configuration, change most other settings on the fly.
- Graceful shutdown: Minimise loss of email if you need to shutdown/restart.
- Be a gentleman to the garbage collector: resources are pooled & recycled where possible.
- Modular Backend system
- Modern TLS support (STARTTLS or SMTPS).
- Can be used as a package in your Go project. Get started in just a few lines of code!
- Fuzz tested. Auto-tested. Battle Tested.
- Arranged as workers running in parallel, using a producer/consumer type structure, taking advantage of Go’s channels and go-routines.
- Modular backend system structured using a decorator-like pattern which allows the chaining of components (a.k.a. Processors) via the config.
- Different ways for processing / delivering email: Supports MySQL and Redis out-of-the box, many other vendor provided processors available.
Like this post? Don’t forget to share it!