From 25d5ad8a7e1ee34cd3b1623ececbd1486e718401 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Mon, 21 Dec 2020 19:27:14 -0800 Subject: [PATCH] chore: Enable automatic generation of email server in non production environments (#1731) --- .env.sample | 2 +- server/mailer.js | 30 +++++++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/.env.sample b/.env.sample index f1629c89..e4c505d0 100644 --- a/.env.sample +++ b/.env.sample @@ -18,7 +18,7 @@ PORT=3000 FORCE_HTTPS=true ENABLE_UPDATES=true -DEBUG=cache,presenters,events +DEBUG=cache,presenters,events,emails,mailer,utils,multiplayer,server,services # Third party signin credentials (at least one is required) SLACK_KEY=get_a_key_from_slack diff --git a/server/mailer.js b/server/mailer.js index 2d89b436..ee0c14a8 100644 --- a/server/mailer.js +++ b/server/mailer.js @@ -26,6 +26,8 @@ import { baseStyles } from "./emails/components/EmailLayout"; import { createQueue } from "./utils/queue"; const log = debug("emails"); +const useTestEmailService = + process.env.NODE_ENV !== "production" && !process.env.SMTP_USERNAME; type Emails = "welcome" | "export"; @@ -73,7 +75,7 @@ export class Mailer { try { log(`Sending email "${data.title}" to ${data.to}`); - await transporter.sendMail({ + const info = await transporter.sendMail({ from: process.env.SMTP_FROM_EMAIL, replyTo: process.env.SMTP_REPLY_EMAIL || process.env.SMTP_FROM_EMAIL, to: data.to, @@ -82,6 +84,10 @@ export class Mailer { text: data.text, attachments: data.attachments, }); + + if (useTestEmailService) { + log("Email Preview URL: %s", nodemailer.getTestMessageUrl(info)); + } } catch (err) { if (process.env.SENTRY_DSN) { Sentry.captureException(err); @@ -159,6 +165,10 @@ export class Mailer { }; constructor() { + this.loadTransport(); + } + + async loadTransport() { if (process.env.SMTP_HOST) { let smtpConfig = { host: process.env.SMTP_HOST, @@ -174,6 +184,24 @@ export class Mailer { }; } + this.transporter = nodemailer.createTransport(smtpConfig); + return; + } + + if (useTestEmailService) { + log("SMTP_USERNAME not provided, generating test account…"); + let testAccount = await nodemailer.createTestAccount(); + + const smtpConfig = { + host: "smtp.ethereal.email", + port: 587, + secure: false, + auth: { + user: testAccount.user, + pass: testAccount.pass, + }, + }; + this.transporter = nodemailer.createTransport(smtpConfig); } }