diff --git a/.env.defaults b/.env.defaults index 9d952f5..bd822e6 100644 --- a/.env.defaults +++ b/.env.defaults @@ -18,8 +18,11 @@ PRISMA_HIDE_UPDATE_MESSAGE=true FIRST_NAME=firstname LAST_NAME=lastname -GMAIL=example@gmail.com -GMAIL_SMTP_PASSWORD=chan geme xyza bcde +SMTP_HOST=smtp.example.com +SMTP_PORT=465 +SMTP_SECURE=true +SMTP_USER=noreply@example.com +SMTP_PASSWORD=password DOMAIN=example.com API_DOMAIN=api.example.com diff --git a/.env.example b/.env.example index 7417ef6..d28f7b0 100644 --- a/.env.example +++ b/.env.example @@ -6,8 +6,11 @@ FIRST_NAME=firstname LAST_NAME=lastname -GMAIL=example@gmail.com -GMAIL_SMTP_PASSWORD=chan geme xyza bcde +SMTP_HOST=smtp.example.com +SMTP_PORT=465 +SMTP_SECURE=true +SMTP_USER=noreply@example.com +SMTP_PASSWORD=password DOMAIN=example.com API_DOMAIN=api.example.com diff --git a/Dockerfile b/Dockerfile index aaeedce..fb76e4f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -43,8 +43,11 @@ ARG ADDRESS_DEV ARG DOMAIN ARG API_DOMAIN ARG MAX_HTTP_CONNECTIONS_PER_MINUTE -ARG GMAIL -ARG GMAIL_SMTP_PASSWORD +ARG SMTP_HOST +ARG SMTP_PORT +ARG SMTP_SECURE +ARG SMTP_USER +ARG SMTP_PASSWORD ARG FIRST_NAME ARG LAST_NAME diff --git a/README.md b/README.md index 1f71960..ea56671 100644 --- a/README.md +++ b/README.md @@ -6,10 +6,8 @@ Create two A records, one for the web side of the website and one for the api si - It doesn't matter what reverse proxy you use (Nginx, Apache, Traefik, Caddy, etc) 1. Point the web domain to the web port (default: 8910) 2. Point the api domain to the api port (default: 8911) -### Gmail App Password -1. Go to your Google [account dashboard](https://myaccount.google.com) -2. Go to Security > 2-Step Verification > App Passwords > Create a new app password -3. Copy the 16 character password +### SMTP +You will need credentials to authorize sending Email, instructions vary depending on provider (Gmail, Hotmail, etc). ### [Docker Compose](./docker-compose.yml) ```yaml version: '3.8' @@ -26,8 +24,11 @@ services: - DATABASE_URL=postgresql://redwood:changeme@db:5432/portfolio - FIRST_NAME=first name # Your first name - LAST_NAME=lastname # Your last name - - GMAIL=example@gmail.com # The Gmail address associated with the app password created earlier - - GMAIL_SMTP_PASSWORD=aaaa bbbb cccc dddd # The app password created earlier + - SMTP_HOST=smtp.example.com + - SMTP_PORT=465 + - SMTP_SECURE=true + - SMTP_USER=noreply@example.com + - SMTP_PASSWORD=password - DOMAIN=portfolio.example.com - API_DOMAIN=api.portfolio.example.com # Careful, addresses below must not end with a '/' @@ -77,4 +78,4 @@ sudo docker exec -u root portfolio chown -R node:node /home/node/app/api/files_p ### Default Credentials **Username:** `admin` -**Password:** [`GMAIL_SMTP_PASSWORD`](#gmail-app-password) +**Password:** [`SMTP_PASSWORD`](#smtp) diff --git a/api/src/lib/email.ts b/api/src/lib/email.ts index 2a28b77..a8dc355 100644 --- a/api/src/lib/email.ts +++ b/api/src/lib/email.ts @@ -8,16 +8,18 @@ interface Options { } const transporter = nodemailer.createTransport({ - service: 'gmail', + host: process.env.SMTP_HOST, + port: Number(process.env.SMTP_PORT), + secure: process.env.SMTP_SECURE === 'true', auth: { - user: process.env.GMAIL, - pass: process.env.GMAIL_SMTP_PASSWORD, + user: process.env.SMTP_USER, + pass: process.env.SMTP_PASSWORD, }, }) export const sendEmail = async ({ to, subject, text, html }: Options) => await transporter.sendMail({ - from: `"${process.env.FIRST_NAME} ${process.env.LAST_NAME} (noreply)" <${process.env.GMAIL}>`, + from: `${process.env.FIRST_NAME} ${process.env.LAST_NAME} <${process.env.GMAIL}>`, to: Array.isArray(to) ? to : [to], subject, text, diff --git a/docker-compose.yml b/docker-compose.yml index 1fba2fc..d41709a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,8 +12,11 @@ services: - DATABASE_URL=postgresql://redwood:changeme@db:5432/portfolio - FIRST_NAME=first name # Your first name - LAST_NAME=lastname # Your last name - - GMAIL=example@gmail.com # The Gmail address associated with the app password created earlier - - GMAIL_SMTP_PASSWORD=aaaa bbbb cccc dddd # The app password created earlier + - SMTP_HOST=smtp.example.com + - SMTP_PORT=465 + - SMTP_SECURE=true + - SMTP_USER=noreply@example.com + - SMTP_PASSWORD=password - DOMAIN=portfolio.example.com - API_DOMAIN=api.portfolio.example.com # Careful, addresses below must not end with a '/' diff --git a/scripts/seed.ts b/scripts/seed.ts index b7465b1..072e64e 100644 --- a/scripts/seed.ts +++ b/scripts/seed.ts @@ -10,7 +10,7 @@ export default async () => { const admin = { username: 'admin', email: process.env.GMAIL, - password: process.env.GMAIL_SMTP_PASSWORD, + password: process.env.SMTP_PASSWORD, } const [hashedPassword, salt] = hashPassword(admin.password)