DoubleZero is a free, open source email & communication project written in Elixir and released under AGPL-3.0. It has 1,248 GitHub stars, 65 forks and 9 open issues, and was last pushed 1.9 years ago. On this registry it ranks #9 of 13 tracked projects in Email & Communication, with 5 head-to-head comparisons available.

What is DoubleZero?

What it is

DoubleZero, also called 00, is a self-hosted email dashboard for developers. It is written in Elixir, released under AGPL-3.0, and lives in the AWS Simple Email Service ecosystem. The README describes it as a dashboard for sending and monitoring emails with AWS SES.

The problem it addresses is the gap between affordable email sending and usable monitoring. The README states that SES is an affordable way to build an email heavy application, but monitoring emails is difficult and often requires custom infrastructure. Setting up the SES to SNS to SQS pipeline is also a headache, and operators still need a dashboard for bounces and other vital information.

Key capabilities

  • Provides a dashboard for viewing email status, bounces, and other vital information.
  • Configures the AWS SES to SNS to SQS pipeline through SST, so operators can run sst deploy instead of wiring the services manually.
  • Sends emails when a client submits a POST request to /api/emails.
  • Tracks email status with multi-recipient support by creating a message record for every recipient.
  • Searches emails and messages, and displays the email body for review.
  • Logs tracking for requests and queue activity.

Who uses it and how

  • Developers building email-heavy applications on AWS SES use it as a self-hosted dashboard to inspect email status instead of building custom monitoring.
  • Teams that want to reduce manual AWS work set EMAIL_IDENTITY, run sst deploy, and then operate the published container for the dashboard.
  • Operators send emails by posting to /api/emails, then review search results, message bodies, and recipient-level status.
  • Administrators verify their sending domain in the AWS SES console and publish DKIM DNS records before relying on the service.

Getting started

The README recommends cloning the repository and running sst deploy after setting EMAIL_IDENTITY, then pulling and running the published Docker image liltechnomancer/double-zero with port 4000 exposed. After the container starts, the user visits the configured PHX_HOST URL, registers a user, and verifies the sending domain in AWS SES.

When to use it — and when not to

It fits teams already using AWS SES that want a self-hosted dashboard and can operate the AWS SES, SNS, and SQS pipeline plus a SQLite database. It is less suitable for teams that do not want to maintain Docker containers, AWS credentials, secrets, and domain verification. The provided metadata lists zero contributors and nine open issues, so adopters should expect limited maturity.

project readme (upstream, from github) — read inline

00 is a self hostable SES dashboard for sending and monitoring emails with AWS.

SES is an incredibly affordable way to build an email heavy application.

However monitoring the emails is a bit of a nightmare, and often requires custom infrastructure. Even setting up the SES -> SNS -> SQS pipeline is a headache for developers unfamiliar with AWS. And when that is done your still left with hooking in or building custom some dashboard for viewing bounces and all the vital information you care about.

00 provides an SST configuration step to set up the SES -> SNS -> SQS pipeline, so you can just run a command and let SST do the rest.

If you would also like to deploy the container with SST follow this guide.

Then 00 provides you that dashboard for viewing the information you care about.

Dashboard displaying emails

Some key features include:

  • Run SST to configure AWS for you.
  • The ability to send emails by sending a POST request to /api/emails.
  • Monitor email status (with multi-recipient tracking).
  • Search emails and messages (a message is created for every recipient).
  • View email body.
  • Log tracking for requests and queue.

Getting started

If you like video walkthroughs Web Dev Cody made a fantastic one.

Configure AWS

The quickest way to get started is to clone this repo and run sst deploy in it. Make sure to set the EMAIL_IDENTITY env variable first, this will be the email or domain you wish to send from.

Using SST is easy, and you can find the steps to do so here and learn how to configure your credentials here

If you would like to avoid using SST you must manually configure AWS. You need to set up a configuration set to write to an SQS queue via SNS. You can configure it however you want, but the more events you send to the queue the more 00 will be able to track (obviously).

If you know what you are doing and you want to configiure AWS manually, you can follow this guide.

Either option will give you an SQS url which we need, along with several other environment variables.

Currently SST does NOT deploy the container for you. It just sets up the needed SES pipeline.

In the near future you will pass a variable to SST to tell it wether it should host the container for you.

Setup the Docker Container

We publish a docker image to the registery

Simply run docker pull liltechnomancer/double-zero

Then run your docker container with the following environment variables set. Exposing port 4000.

Example docker run -it --env-file .env -p 4000:4000 "liltechnomancer/double-zero"

AWS_SECRET_ACCESS_KEY=
AWS_ACCESS_KEY_ID=
AWS_REGION= # Ex: us-east-1
SQS_URL=  # Ex: https://sqs.us-east-1.amazonaws.com/${id}

SYSTEM_EMAIL= # For sending stuff like password resets. Ex: [email protected] should be able to send from SES.

SECRET_KEY_BASE= # A long secret. at least 64 characters. Can be made with mix phx.gen.secret or however you generate safe keys.

DATABASE_PATH= # Path to SQLite database Ex: 00.db
PHX_HOST= #  URL or IP of where this service is running. Ex: example.com

Now visit your url (whatever you set PHX_HOST to) and register your user.

Verify your Domain

After you have configured SES, with sst or manually, you have to verify that you own your domain.

  1. Log into the AWS management Console
  2. Navigate to your SES Identities in the region you setup SES.
  3. Select the Domain you want to verify
  4. Scroll down to DomainKeys Identified Mail (DKIM) and open the Publish DNS records dropdown.
  5. You will see three DNS records
  6. Head over to your domain provider and add these DNS records to your Domain.

After you published these DNS records to you domain it can take up to 72h to verify your domain according to AWS. But realisticly it will be verified in less than 12h.

Send an EMail

Register an API Key

  1. Log into your double-zero instance.
  2. Navigate to Settings
  3. Enter a unique name into the Token Name field
  4. Click on Create New API Token`
  5. You will now be shown the API-Key. Save it and treat it like a password, you can´t view this key anymore after closing the pop-up.

Make an API Request

You can now make requests to your double-zero instance. To send an email you have to hit the endpoint on yourdomain.com/api/emails.

Use you favorite libary in your preferred language that can do https requests.

  1. Set the Authorization Header to Bearer yourapikeyhere
  2. Add a json body representing your email
  3. Send a POST request to the endpoint

The response of an successful request looks like this.

{
    "data": {
        "id": "51c2df38-0e3d-458b-9aff-3bf872868695", //This id is unique for every request
        "message": "Your email has successfully been queued.",
        "success": true
    }
}

Body parameters

The request body has to be json with these parameters

Param Type Required Notes Example
markdown string no For the email body.
Either markdown or html can be used.
{"markdown":"Some Text"}
html string no For the email body.
Either markdown or html can be used.
{"html":"<h1>Some HTML</h1>"}
subject string no The email`s subject field {"subject":"Some Subject"}
from string yes The email address from which the email is sent.
Must be [email protected].
The the domain has to be added to SES and be verified.
{"from":"[email protected]"}
to string/string[] yes The emails recipient(s) {"to":"[email protected]"} or {"to": ["[email protected]", "[email protected]"]}
cc string no "The email address to which a copy of the email will be sent.". {"cc":"[email protected]"}
reply_to string no The email address from which the reply will be sent. {"reply_to":"[email protected]"}
headers object no An object containing key/value pairs of headers {"headers": {"X-Entity-Ref-ID": "00"}}
provider_options object no An object containing key/value pairs of provider options {"provider_options": {"tags": [{"name": "tag-name", "value": "some-value"}]}}
attachments array no An array containing attachments {"attachments": [{"filename": "invoice.txt", "content": "pewp", "content_type": "text/plain"}]}

Example

{
  "html": "<h1>Hello world!</h1>",
  "subject": "Can your email service track multiple recipients?",
  "from": "[email protected]",
  "to": ["[email protected]", "[email protected]"]
}

Support

Stuck? Tell me about it on Discord and lets unstick you!

Pro + support open source.

If you are eager to support this project you can pre-order a pro version for you to self host.

Planned pro features include

  • Multiple Users
  • Teams
  • Advanced Analytics
  • Track email history
  • Possibly more, we will see.

Frequently asked questions

Is DoubleZero free to use?

DoubleZero is open source under the AGPL-3.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does DoubleZero do?

Self-hosted email infrastructure for developers

What is DoubleZero written in?

DoubleZero is primarily written in Elixir. Its source is publicly available at https://github.com/technomancy-dev/00, and it has 1,248 GitHub stars.