Implement actual email sending, with nodemailer!
This commit is contained in:
parent
b1f69e16f6
commit
4b388e1a1b
4 changed files with 58 additions and 11 deletions
5
.sample-env
Normal file
5
.sample-env
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
CHIPCHOC_EMAIL_HOST=mail.example.com
|
||||||
|
CHIPCHOC_EMAIL_PORT=587
|
||||||
|
CHIPCHOC_EMAIL_SECURE=false
|
||||||
|
CHIPCHOC_EMAIL_USER=user@example.com
|
||||||
|
CHIPCHOC_EMAIL_PASSWORD=badexample
|
|
@ -19,10 +19,11 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"cors": "^2.8.5",
|
"cors": "^2.8.5",
|
||||||
"dotenv": "^8.2.0",
|
"dotenv": "^10.0.0",
|
||||||
"express": "^4.17.1",
|
"express": "^4.17.1",
|
||||||
"express-ws": "^4.0.0",
|
"express-ws": "^4.0.0",
|
||||||
"importabular": "^0.2.9",
|
"importabular": "^0.2.9",
|
||||||
|
"nodemailer": "^6.6.1",
|
||||||
"showdown": "^1.9.1",
|
"showdown": "^1.9.1",
|
||||||
"sirv-cli": "^1.0.0"
|
"sirv-cli": "^1.0.0"
|
||||||
}
|
}
|
||||||
|
|
42
server.js
42
server.js
|
@ -1,11 +1,34 @@
|
||||||
const express = require('express')
|
const express = require('express')
|
||||||
|
const nodemailer = require('nodemailer')
|
||||||
|
|
||||||
require('dotenv').config()
|
require('dotenv').config()
|
||||||
|
|
||||||
|
let DEBUG
|
||||||
|
|
||||||
|
if (process.env.DEBUG || process.env.CHIPCHOC_DEBUG) {
|
||||||
|
DEBUG = true
|
||||||
|
} else {
|
||||||
|
DEBUG = false
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DEBUG) console.log('Starting ChipChoc in debug mode')
|
||||||
|
|
||||||
|
// set up nodemailer
|
||||||
|
const perumal = nodemailer.createTransport({
|
||||||
|
// (that's the name of badri's postmaster, in case you were wondering ;)
|
||||||
|
host: process.env.CHIPCHOC_EMAIL_HOST,
|
||||||
|
port: process.env.CHIPCHOC_EMAIL_PORT || 587,
|
||||||
|
secure: process.env.CHIPCHOC_EMAIL_SECURE == 'false' ? false : true,
|
||||||
|
auth: {
|
||||||
|
user: process.env.CHIPCHOC_EMAIL_USER,
|
||||||
|
pass: process.env.CHIPCHOC_EMAIL_PASSWORD,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
const app = express()
|
const app = express()
|
||||||
var expressWs = require('express-ws')(app)
|
var expressWs = require('express-ws')(app)
|
||||||
|
|
||||||
const port = process.env.port || 5000
|
const port = process.env.CHIPCHOC_PORT || 5000
|
||||||
|
|
||||||
const cors = require('cors')
|
const cors = require('cors')
|
||||||
const path = require('path')
|
const path = require('path')
|
||||||
|
@ -20,10 +43,11 @@ app.get('/air', (req, res) => {
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
app.ws('/hit-send', (ws, request) => {
|
app.ws('/hit-send', (ws, request) => {
|
||||||
console.log('Hitting send on some emails!')
|
console.log('Hitting send on some emails!')
|
||||||
|
|
||||||
ws.on('message', (message) => {
|
ws.on('message', async (message) => {
|
||||||
try {
|
try {
|
||||||
message = JSON.parse(message)
|
message = JSON.parse(message)
|
||||||
} catch(err) {
|
} catch(err) {
|
||||||
|
@ -34,11 +58,23 @@ app.ws('/hit-send', (ws, request) => {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (DEBUG) {
|
||||||
console.log(`\n\n-------------------------- BEGIN EMAIL --------------------------\n`)
|
console.log(`\n\n-------------------------- BEGIN EMAIL --------------------------\n`)
|
||||||
console.log(`From: ${message.from}\nTo:${message.to}\n\n${message.text}`)
|
console.log(`From: ${message.from}\nTo:${message.to}\n\n${message.text}`)
|
||||||
console.log(`\n--------------------------- END EMAIL ---------------------------`)
|
console.log(`\n--------------------------- END EMAIL ---------------------------`)
|
||||||
|
} else {
|
||||||
|
console.log(`Sending email: ${message.from} -> ${message.to}`)
|
||||||
|
|
||||||
// TODO: actually send the email
|
// actually send the email
|
||||||
|
let receipt = await perumal.sendMail({
|
||||||
|
from: message.from || process.env.CHIPCHOC_DEFAULT_SENDER,
|
||||||
|
to: message.to,
|
||||||
|
bcc: message.from || process.env.CHIPCHOC_DEFAULT_SENDER,
|
||||||
|
text: message.text,
|
||||||
|
html: message.html,
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
ws.send(JSON.stringify({
|
ws.send(JSON.stringify({
|
||||||
|
|
13
yarn.lock
13
yarn.lock
|
@ -313,10 +313,10 @@ destroy@~1.0.4:
|
||||||
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
|
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
|
||||||
integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
|
integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
|
||||||
|
|
||||||
dotenv@^8.2.0:
|
dotenv@^10.0.0:
|
||||||
version "8.2.0"
|
version "10.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a"
|
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81"
|
||||||
integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==
|
integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==
|
||||||
|
|
||||||
ee-first@1.1.1:
|
ee-first@1.1.1:
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
|
@ -732,6 +732,11 @@ negotiator@0.6.2:
|
||||||
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
|
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
|
||||||
integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
|
integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
|
||||||
|
|
||||||
|
nodemailer@^6.6.1:
|
||||||
|
version "6.6.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.6.1.tgz#2a05fbf205b897d71bf43884167b5d4d3bd01b99"
|
||||||
|
integrity sha512-1xzFN3gqv+/qJ6YRyxBxfTYstLNt0FCtZaFRvf4Sg9wxNGWbwFmGXVpfSi6ThGK6aRxAo+KjHtYSW8NvCsNSAg==
|
||||||
|
|
||||||
normalize-path@^3.0.0, normalize-path@~3.0.0:
|
normalize-path@^3.0.0, normalize-path@~3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
|
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
|
||||||
|
|
Loading…
Reference in a new issue