Convert email newsletters into Atom feeds
Send test emails manually from the command line with the following:
```
cat << "EOF" > /tmp/example-email.txt
From: Publisher
To: ru9rmeebswmcy7wx@localhost
Subject: Test email with HTML
Date: Sat, 13 Mar 2021 11:30:40
Some HTML
EOF
curl smtp://localhost:2525 --mail-from publisher@example.com --mail-rcpt ru9rmeebswmcy7wx@localhost --upload-file /tmp/example-email.txt
```
# [Watch the Code Review!](https://youtu.be/FMTb3Z-QiPY)
# Deploy Your Own Instance (Self-Host)
1. Create accounts on [GitHub](https://github.com), [Namecheap](https://www.namecheap.com), and [DigitalOcean](https://www.digitalocean.com).
2. [Fork](https://github.com/leafac/kill-the-newsletter.com/fork) this repository.
3. Create a deployment SSH key pair:
```console
$ ssh-keygen
```
**Private key (`id_rsa`):** Add to your fork under **Settings > Secrets** as a new secret called `SSH_PRIVATE_KEY`.
**Public key (`id_rsa.pub`):** Add to your fork under **Settings > Deploy keys** and to your DigitalOcean account under **Account > Security > SSH keys**.
4. Buy a domain on Namecheap.
5. Create a DigitalOcean droplet:
| | |
| ---------------------- | ------------------------------------------------------- |
| **Image** | Ubuntu 18.04.3 (LTS) x64 |
| **Plan** | Starter Standard \$5/mo |
| **Additional options** | Monitoring |
| **Authentication** | Your Deployment SSH Key |
| **Hostname** | `` |
| **Backups** | Enable |
6. Assign the new droplet a **Firewall**:
| | | |
| ----------------- | ------------------------------------------------------- | --------- |
| **Name** | `` | |
| **Inbound Rules** | ICMP | |
| | SSH | 22 |
| | Custom | 25 (SMTP) |
| | HTTP | 80 |
| | HTTPS | 443 |
7. Assign the new droplet a **Floating IP**.
8. Configure the DNS in Namecheap:
| Type | Host | Value |
| ------- | ----- | ------------------------------------------------------- |
| `A` | `@` | `` |
| `CNAME` | `www` | `` |
| `MX` | `@` | `` |
9. Configure the deployment on [`package.json`](package.json), particularly under the following keys:
- `apps.env.BASE_URL`.
- `apps.env.EMAIL_DOMAIN`.
- `apps.env.ISSUE_REPORT`.
- `deploy.production.host`.
- `deploy.production.repo`.
10. Configure [Caddy](https://caddyserver.com), the reverse proxy, on [`Caddyfile`](Caddyfile).
11. Setup the server:
```console
$ ssh-add
$ npm run deploy:setup
```
12. Migrate the existing feeds (if any):
```console
$ ssh-add
$ ssh -A root@
root@ $ rsync -av /root/kill-the-newsletter.com/current/static/feeds/
root@ $ rsync -av /root/kill-the-newsletter.com/current/static/alternate/
```
13. Push to your fork, which will trigger the GitHub Action that deploys the code and starts the server.
# Run Locally
Install [Node.js](https://nodejs.org/) and run:
```console
$ npm install
$ npm run develop
```
The web server will be running at `http://localhost:8000` and the email server at `smtp://localhost:2525`.
# Run Tests
Install [Node.js](https://nodejs.org/) and run:
```console
$ npm install-test
```
# Docker Support (Experimental)
Install [Docker](https://www.docker.com/) and run:
```console
$ docker build -t kill-the-newsletter .
$ docker run kill-the-newsletter
```
The web server will be running at `http://localhost:8000` and the email server at `smtp://localhost:2525`.
For use in production, start with the example [`Dockerfile`](Dockerfile).