# SMTP Server Container for OneUptime

This is a simple SMTP server which is used to send bulk emails. This can be used to send email alerts to subscribers and team.

> This will not work on your local machine because email sending is blocked by ISP. You need to run these on the server and test.

## Run a OneUptime Haraka Docker Container

### Setup Private Key (Optional)

```
# Unix machine


# generate private key

openssl genrsa -out private 2048

# Encode it to base64 and export it

export DKIM_PRIVATE_KEY=$(cat private | base64)

```

> If you already have a private key, you can point the export command to it, and export as base64 encoded

### Setup DKIM on DNS TXT Record (Optional)

```
# Unix machine

# private should point to the private key generated previously

chmod 0400 private
openssl rsa -in private -out public -pubout

# value of DKIM dns record

echo "v=DKIM1;p=$(grep -v '^-' public | tr -d '\n')"

```

> When setting up the DKIM dns txt record (recommended), the selector should be `oneuptime._domainkey` then the value should be the output of the echo command

### Setup DMARC and SPF DNS TXT Record (Optional)

To setup dmarc for the smtp server, you need to create a new dns record with the following values

| Type | Name    | Content                                                                                  |
| ---- | ------- | ---------------------------------------------------------------------------------------- |
| TXT  | \_dmarc | v=DMARC1; p=reject; adkim=s; aspf=r; rua=mailto:youremail; ruf=mailto:youremail; pct=100 |

> For SPF dns record, you need to setup with appropriate values, if the ip of the smtp mail server is static, you can add that to the spf ip list

### Setup tls Keys (Optional)

```
# Unix machine


# generate tls_cert.pem and tls_key.pem files with there keys
# this command will open a prompt for you to fill in your details

openssl req -x509 -nodes -days 2190 -newkey rsa:2048 -keyout tls_key.pem -out tls_cert.pem

# Encode your tls to base64 and export it

export TLS_KEY=$(cat tls_key.pem | base64)
export TLS_CERT=$(cat tls_cert.pem | base64)

```

> If you already have tls_key and tls_cert for your domain, you can point the export command to the tls files to generate base64 encoded value

## Build Docker Container

```
docker build --build-arg PORT="2525" . -t haraka:latest
```

### Run Haraka SMTP Server

```
docker run -p 2525:2525 -e SMTP_USER="user@oneuptime.com" -e SMTP_PASSWORD="oneuptime" -e DOMAIN="oneuptime.com" -e DKIM_PRIVATE_KEY=$DKIM_PRIVATE_KEY -e TLS_CERT=$TLS_CERT -e TLS_KEY=$TLS_KEY  haraka:latest
```

> The following envs are optional `DKIM_PRIVATE_KEY`, `TLS_CERT`, `TLS_KEY` and `DOMAIN`

## Test

```
# Install swaks on Linux machine

sudo apt-get update
sudo apt-get install swaks -y

# MacOS

brew install swaks

# Test

swaks --to jude@oneuptime.com --from support@oneuptime.com --server localhost \
  --port 2525 --auth-user user@oneuptime.com --auth-password oneuptime

```

Check the logs for running container and see if you get a mail in your inbox.
