Use SMTP credentials instead of Gmail auth for Email

This commit is contained in:
Ahmed Al-Taiar
2024-10-16 21:36:57 -04:00
parent bac5b5fe48
commit 6540329f36
7 changed files with 35 additions and 20 deletions

View File

@ -18,8 +18,11 @@ PRISMA_HIDE_UPDATE_MESSAGE=true
FIRST_NAME=firstname FIRST_NAME=firstname
LAST_NAME=lastname LAST_NAME=lastname
GMAIL=example@gmail.com SMTP_HOST=smtp.example.com
GMAIL_SMTP_PASSWORD=chan geme xyza bcde SMTP_PORT=465
SMTP_SECURE=true
SMTP_USER=noreply@example.com
SMTP_PASSWORD=password
DOMAIN=example.com DOMAIN=example.com
API_DOMAIN=api.example.com API_DOMAIN=api.example.com

View File

@ -6,8 +6,11 @@
FIRST_NAME=firstname FIRST_NAME=firstname
LAST_NAME=lastname LAST_NAME=lastname
GMAIL=example@gmail.com SMTP_HOST=smtp.example.com
GMAIL_SMTP_PASSWORD=chan geme xyza bcde SMTP_PORT=465
SMTP_SECURE=true
SMTP_USER=noreply@example.com
SMTP_PASSWORD=password
DOMAIN=example.com DOMAIN=example.com
API_DOMAIN=api.example.com API_DOMAIN=api.example.com

View File

@ -43,8 +43,11 @@ ARG ADDRESS_DEV
ARG DOMAIN ARG DOMAIN
ARG API_DOMAIN ARG API_DOMAIN
ARG MAX_HTTP_CONNECTIONS_PER_MINUTE ARG MAX_HTTP_CONNECTIONS_PER_MINUTE
ARG GMAIL ARG SMTP_HOST
ARG GMAIL_SMTP_PASSWORD ARG SMTP_PORT
ARG SMTP_SECURE
ARG SMTP_USER
ARG SMTP_PASSWORD
ARG FIRST_NAME ARG FIRST_NAME
ARG LAST_NAME ARG LAST_NAME

View File

@ -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) - 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) 1. Point the web domain to the web port (default: 8910)
2. Point the api domain to the api port (default: 8911) 2. Point the api domain to the api port (default: 8911)
### Gmail App Password ### SMTP
1. Go to your Google [account dashboard](https://myaccount.google.com) You will need credentials to authorize sending Email, instructions vary depending on provider (Gmail, Hotmail, etc).
2. Go to Security > 2-Step Verification > App Passwords > Create a new app password
3. Copy the 16 character password
### [Docker Compose](./docker-compose.yml) ### [Docker Compose](./docker-compose.yml)
```yaml ```yaml
version: '3.8' version: '3.8'
@ -26,8 +24,11 @@ services:
- DATABASE_URL=postgresql://redwood:changeme@db:5432/portfolio - DATABASE_URL=postgresql://redwood:changeme@db:5432/portfolio
- FIRST_NAME=first name # Your first name - FIRST_NAME=first name # Your first name
- LAST_NAME=lastname # Your last name - LAST_NAME=lastname # Your last name
- GMAIL=example@gmail.com # The Gmail address associated with the app password created earlier - SMTP_HOST=smtp.example.com
- GMAIL_SMTP_PASSWORD=aaaa bbbb cccc dddd # The app password created earlier - SMTP_PORT=465
- SMTP_SECURE=true
- SMTP_USER=noreply@example.com
- SMTP_PASSWORD=password
- DOMAIN=portfolio.example.com - DOMAIN=portfolio.example.com
- API_DOMAIN=api.portfolio.example.com - API_DOMAIN=api.portfolio.example.com
# Careful, addresses below must not end with a '/' # 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 ### Default Credentials
**Username:** `admin` **Username:** `admin`
**Password:** [`GMAIL_SMTP_PASSWORD`](#gmail-app-password) **Password:** [`SMTP_PASSWORD`](#smtp)

View File

@ -8,16 +8,18 @@ interface Options {
} }
const transporter = nodemailer.createTransport({ const transporter = nodemailer.createTransport({
service: 'gmail', host: process.env.SMTP_HOST,
port: Number(process.env.SMTP_PORT),
secure: process.env.SMTP_SECURE === 'true',
auth: { auth: {
user: process.env.GMAIL, user: process.env.SMTP_USER,
pass: process.env.GMAIL_SMTP_PASSWORD, pass: process.env.SMTP_PASSWORD,
}, },
}) })
export const sendEmail = async ({ to, subject, text, html }: Options) => export const sendEmail = async ({ to, subject, text, html }: Options) =>
await transporter.sendMail({ 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], to: Array.isArray(to) ? to : [to],
subject, subject,
text, text,

View File

@ -12,8 +12,11 @@ services:
- DATABASE_URL=postgresql://redwood:changeme@db:5432/portfolio - DATABASE_URL=postgresql://redwood:changeme@db:5432/portfolio
- FIRST_NAME=first name # Your first name - FIRST_NAME=first name # Your first name
- LAST_NAME=lastname # Your last name - LAST_NAME=lastname # Your last name
- GMAIL=example@gmail.com # The Gmail address associated with the app password created earlier - SMTP_HOST=smtp.example.com
- GMAIL_SMTP_PASSWORD=aaaa bbbb cccc dddd # The app password created earlier - SMTP_PORT=465
- SMTP_SECURE=true
- SMTP_USER=noreply@example.com
- SMTP_PASSWORD=password
- DOMAIN=portfolio.example.com - DOMAIN=portfolio.example.com
- API_DOMAIN=api.portfolio.example.com - API_DOMAIN=api.portfolio.example.com
# Careful, addresses below must not end with a '/' # Careful, addresses below must not end with a '/'

View File

@ -10,7 +10,7 @@ export default async () => {
const admin = { const admin = {
username: 'admin', username: 'admin',
email: process.env.GMAIL, email: process.env.GMAIL,
password: process.env.GMAIL_SMTP_PASSWORD, password: process.env.SMTP_PASSWORD,
} }
const [hashedPassword, salt] = hashPassword(admin.password) const [hashedPassword, salt] = hashPassword(admin.password)