Skip to content
This repository was archived by the owner on Oct 24, 2023. It is now read-only.

Commit 6d10638

Browse files
feat: switch from sendmail to SMTP-based sending (#94)
* wip * wip * wip * fix
1 parent 828614b commit 6d10638

File tree

3 files changed

+44
-106
lines changed

3 files changed

+44
-106
lines changed

functions/contact.js

Lines changed: 39 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,23 @@
11
/* eslint-disable no-console */
2-
import { promisify } from 'util'
3-
import sendmail from 'sendmail'
2+
import nodemailer from 'nodemailer'
43
import validator from 'validator'
54
import xssFilters from 'xss-filters'
65

76
const shouldSend = process.env.SEND_MAIL
87

9-
const noop = () => {}
10-
const sendmailOptions = {
11-
logger: {
12-
debug: noop,
13-
info: noop,
14-
warn: console.warn,
15-
error: console.error
8+
const NODEMAILER_INFO = {
9+
host: process.env.SMTP_HOST,
10+
port: process.env.SMTP_PORT || 465,
11+
secure: process.env.SMTP_SECURE ? Boolean(process.env.SMTP_SECURE) : true,
12+
auth: {
13+
user: process.env.EMAIL_USER,
14+
pass: process.env.EMAIL_PASSWORD
1615
}
1716
}
18-
const pSendMail = promisify(sendmail(sendmailOptions))
17+
18+
const SMTP_DEFAULT_FIELDS = {
19+
from: 'Developmint <[email protected]>'
20+
}
1921

2022
exports.handler = async (event) => {
2123
if (event.httpMethod !== 'POST') {
@@ -55,12 +57,33 @@ const validateAndSanitize = (key, value) => {
5557
return rejectFunctions.hasOwnProperty(key) && !rejectFunctions[key](value) && xssFilters.inHTMLData(value)
5658
}
5759

58-
const sendMail = (name, email, msg) => pSendMail({
59-
from: email,
60-
to: process.env.MAIL_TO,
61-
subject: 'New contact form message',
62-
text: msg
63-
})
60+
const sendMail = async (name, email, msg) => {
61+
const transporter = nodemailer.createTransport(
62+
{
63+
...NODEMAILER_INFO,
64+
logger: {
65+
debug: () => {},
66+
info: () => {},
67+
warn: console.warn,
68+
error: console.error
69+
},
70+
debug: shouldSend
71+
},
72+
SMTP_DEFAULT_FIELDS
73+
)
74+
75+
// Message object
76+
const message = {
77+
replyTo: email,
78+
to: process.env.EMAIL_TO,
79+
subject: `New contact form message from ${email}`,
80+
text: msg
81+
}
82+
83+
await transporter.sendMail(message)
84+
85+
console.log('Message sent successfully!')
86+
}
6487

6588
const sendMailDev = (...args) => {
6689
console.log(...args)

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@
2121
"@nuxtjs/tailwindcss": "^1.1.2",
2222
"eslint-plugin-nuxt": "^0.4.3",
2323
"intersection-observer": "^0.7.0",
24+
"nodemailer": "^6.3.0",
2425
"nuxt-edge": "^2.10.0-26123052.0daaf87c",
2526
"nuxt-i18n": "^6.1.1",
2627
"nuxt-svg-loader": "^1.0.1",
2728
"nuxt-webfontloader": "^1.1.0",
2829
"postcss-nested": "^4.1.2",
29-
"sendmail": "^1.6.1",
3030
"shifty": "^2.8.0",
3131
"validator": "^11.1.0",
3232
"vue-cookieconsent-component": "^1.2.0",

yarn.lock

Lines changed: 4 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -1719,11 +1719,6 @@ acorn@^7.0.0:
17191719
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.0.0.tgz#26b8d1cd9a9b700350b71c0905546f64d1284e7a"
17201720
integrity sha512-PaF/MduxijYYt7unVGRuds1vBC9bFxbNf+VWqhOClfdgy7RlVkQqt610ig1/yxTgsDIfW1cWDel5EBbOy3jdtQ==
17211721

1722-
1723-
version "1.0.1"
1724-
resolved "https://registry.yarnpkg.com/addressparser/-/addressparser-1.0.1.tgz#47afbe1a2a9262191db6838e4fd1d39b40821746"
1725-
integrity sha1-R6++GiqSYhkdtoOOT9HTm0CCF0Y=
1726-
17271722
ajv-errors@^1.0.0:
17281723
version "1.0.1"
17291724
resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d"
@@ -2310,18 +2305,6 @@ buffer@^5.2.0:
23102305
base64-js "^1.0.2"
23112306
ieee754 "^1.1.4"
23122307

2313-
2314-
version "3.10.0"
2315-
resolved "https://registry.yarnpkg.com/buildmail/-/buildmail-3.10.0.tgz#c6826d716e7945bb6f6b1434b53985e029a03159"
2316-
integrity sha1-xoJtcW55RbtvaxQ0tTmF4CmgMVk=
2317-
dependencies:
2318-
addressparser "1.0.1"
2319-
libbase64 "0.1.0"
2320-
libmime "2.1.0"
2321-
libqp "1.1.0"
2322-
nodemailer-fetch "1.6.0"
2323-
nodemailer-shared "1.1.0"
2324-
23252308
builtin-status-codes@^3.0.0:
23262309
version "3.0.0"
23272310
resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
@@ -3506,13 +3489,6 @@ dir-glob@^3.0.1:
35063489
dependencies:
35073490
path-type "^4.0.0"
35083491

3509-
3510-
version "0.2.2"
3511-
resolved "https://registry.yarnpkg.com/dkim-signer/-/dkim-signer-0.2.2.tgz#aa81ec071eeed3622781baa922044d7800e5f308"
3512-
integrity sha1-qoHsBx7u02IngbqpIgRNeADl8wg=
3513-
dependencies:
3514-
libmime "^2.0.3"
3515-
35163492
35173493
version "1.5.0"
35183494
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
@@ -4982,16 +4958,6 @@ husky@^3.0.5:
49824958
run-node "^1.0.0"
49834959
slash "^3.0.0"
49844960

4985-
4986-
version "0.4.13"
4987-
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2"
4988-
integrity sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=
4989-
4990-
4991-
version "0.4.15"
4992-
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb"
4993-
integrity sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=
4994-
49954961
[email protected], iconv-lite@^0.4.24, iconv-lite@^0.4.4:
49964962
version "0.4.24"
49974963
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
@@ -5661,34 +5627,6 @@ levn@^0.3.0, levn@~0.3.0:
56615627
prelude-ls "~1.1.2"
56625628
type-check "~0.3.2"
56635629

5664-
5665-
version "0.1.0"
5666-
resolved "https://registry.yarnpkg.com/libbase64/-/libbase64-0.1.0.tgz#62351a839563ac5ff5bd26f12f60e9830bb751e6"
5667-
integrity sha1-YjUag5VjrF/1vSbxL2Dpgwu3UeY=
5668-
5669-
5670-
version "2.1.0"
5671-
resolved "https://registry.yarnpkg.com/libmime/-/libmime-2.1.0.tgz#51bc76de2283161eb9051c4bc80aed713e4fd1cd"
5672-
integrity sha1-Ubx23iKDFh65BRxLyArtcT5P0c0=
5673-
dependencies:
5674-
iconv-lite "0.4.13"
5675-
libbase64 "0.1.0"
5676-
libqp "1.1.0"
5677-
5678-
libmime@^2.0.3:
5679-
version "2.1.3"
5680-
resolved "https://registry.yarnpkg.com/libmime/-/libmime-2.1.3.tgz#25017ca5ab5a1e98aadbe2725017cf1d48a42a0c"
5681-
integrity sha1-JQF8pataHpiq2+JyUBfPHUikKgw=
5682-
dependencies:
5683-
iconv-lite "0.4.15"
5684-
libbase64 "0.1.0"
5685-
libqp "1.1.0"
5686-
5687-
5688-
version "1.1.0"
5689-
resolved "https://registry.yarnpkg.com/libqp/-/libqp-1.1.0.tgz#f5e6e06ad74b794fb5b5b66988bf728ef1dedbe8"
5690-
integrity sha1-9ebgatdLeU+1tbZpiL9yjvHe2+g=
5691-
56925630
lines-and-columns@^1.1.6:
56935631
version "1.1.6"
56945632
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
@@ -5924,14 +5862,6 @@ lru-cache@^5.1.1:
59245862
dependencies:
59255863
yallist "^3.0.2"
59265864

5927-
5928-
version "3.12.0"
5929-
resolved "https://registry.yarnpkg.com/mailcomposer/-/mailcomposer-3.12.0.tgz#9c5e1188aa8e1c62ec8b86bd43468102b639e8f9"
5930-
integrity sha1-nF4RiKqOHGLsi4a9Q0aBArY56Pk=
5931-
dependencies:
5932-
buildmail "3.10.0"
5933-
libmime "2.1.0"
5934-
59355865
make-dir@^1.0.0:
59365866
version "1.3.0"
59375867
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c"
@@ -6459,17 +6389,10 @@ node-res@^5.0.1:
64596389
on-finished "^2.3.0"
64606390
vary "^1.1.2"
64616391

6462-
6463-
version "1.6.0"
6464-
resolved "https://registry.yarnpkg.com/nodemailer-fetch/-/nodemailer-fetch-1.6.0.tgz#79c4908a1c0f5f375b73fe888da9828f6dc963a4"
6465-
integrity sha1-ecSQihwPXzdbc/6IjamCj23JY6Q=
6466-
6467-
6468-
version "1.1.0"
6469-
resolved "https://registry.yarnpkg.com/nodemailer-shared/-/nodemailer-shared-1.1.0.tgz#cf5994e2fd268d00f5cf0fa767a08169edb07ec0"
6470-
integrity sha1-z1mU4v0mjQD1zw+nZ6CBae2wfsA=
6471-
dependencies:
6472-
nodemailer-fetch "1.6.0"
6392+
nodemailer@^6.3.0:
6393+
version "6.3.0"
6394+
resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.3.0.tgz#a89b0c62d3937bdcdeecbf55687bd7911b627e12"
6395+
integrity sha512-TEHBNBPHv7Ie/0o3HXnb7xrPSSQmH1dXwQKRaMKDBGt/ZN54lvDVujP6hKkO/vjkIYL9rK8kHSG11+G42Nhxuw==
64736396

64746397
nopt@^4.0.1:
64756398
version "4.0.1"
@@ -8550,14 +8473,6 @@ [email protected]:
85508473
range-parser "~1.2.1"
85518474
statuses "~1.5.0"
85528475

8553-
sendmail@^1.6.1:
8554-
version "1.6.1"
8555-
resolved "https://registry.yarnpkg.com/sendmail/-/sendmail-1.6.1.tgz#6be92fb4be70d1d9ad102030aeb1e737bd512159"
8556-
integrity sha512-lIhvnjSi5e5jL8wA1GPP6j2QVlx6JOEfmdn0QIfmuJdmXYGmJ375kcOU0NSm/34J+nypm4sa1AXrYE5w3uNIIA==
8557-
dependencies:
8558-
dkim-signer "0.2.2"
8559-
mailcomposer "3.12.0"
8560-
85618476
serialize-javascript@^1.3.0, serialize-javascript@^1.7.0, serialize-javascript@^1.9.0:
85628477
version "1.9.0"
85638478
resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.9.0.tgz#5b77019d7c3b85fe91b33ae424c53dcbfb6618bd"

0 commit comments

Comments
 (0)