diff --git a/demo/payload.config.json b/demo/payload.config.json index 6e0ed3faeb..dc23d3d974 100644 --- a/demo/payload.config.json +++ b/demo/payload.config.json @@ -46,7 +46,7 @@ } ], "email": { - "provider": "smtp", + "provider": "mock", "host": "smtp.ethereal.email", "port": 587, "secure": false, diff --git a/src/routes/email.routes.js b/src/routes/email.routes.js index 53761eda31..55801a8ced 100644 --- a/src/routes/email.routes.js +++ b/src/routes/email.routes.js @@ -9,29 +9,49 @@ const emailRoutes = emailConfig => { .route('') .post( passport.authenticate('jwt', { session: false }), - (req, res, next) => smtpEmailHandler(req, res, next, emailConfig) + (req, res, next) => getEmailHandler(req, res, next, emailConfig) ); return router; }; +const getEmailHandler = (req, res, next, emailConfig) => { + switch (emailConfig.provider) { + case 'mock': + return mockEmailHandler(req, res, next, emailConfig); + case 'smtp': + return smtpEmailHandler(req, res, next, emailConfig); + default: + throw new Error('Invalid e-mail configuration'); + } +}; + +const mockEmailHandler = async (req, res, next, emailConfig) => { + let testAccount = await nodemailer.createTestAccount(); + process.env.EMAIL_USER = testAccount.user; + process.env.EMAIL_PASS = testAccount.pass; + emailConfig.host = 'smtp.ethereal.email'; + emailConfig.port = 587; + emailConfig.secure = false; + emailConfig.fromName = 'John Doe'; + emailConfig.fromAddress = 'john.doe@payloadcms.com'; + return smtpEmailHandler(req, res, next, emailConfig); +}; + const smtpEmailHandler = async (req, res, next, emailConfig) => { try { - let testAccount = await nodemailer.createTestAccount(); - - // create reusable transporter object using the default SMTP transport let transporter = nodemailer.createTransport({ host: emailConfig.host, port: emailConfig.port, secure: emailConfig.secure, // true for 465, false for other ports auth: { - user: testAccount.user, // generated ethereal user - pass: testAccount.pass // generated ethereal password + user: process.env.EMAIL_USER, + pass: process.env.EMAIL_PASS } }); // send mail with defined transport object - let info = await transporter.sendMail({ + await transporter.sendMail({ from: `"${emailConfig.fromName}" <${emailConfig.fromAddress}>`, to: req.body.toAddress, subject: req.body.subject || 'Password Reset',