mirror of
https://github.com/kevin-DL/complete-node-bootcamp.git
synced 2026-01-12 03:15:12 +00:00
68 lines
1.6 KiB
JavaScript
68 lines
1.6 KiB
JavaScript
const nodemailer = require('nodemailer');
|
|
const pug = require('pug');
|
|
const htmlToText = require('html-to-text');
|
|
|
|
module.exports = class Email {
|
|
constructor(user, url) {
|
|
this.to = user.email;
|
|
this.firstName = user.name.split(' ')[0];
|
|
this.url = url;
|
|
this.from = `Jonas Schmedtmann <${process.env.EMAIL_FROM}>`;
|
|
}
|
|
|
|
newTransport() {
|
|
if (process.env.NODE_ENV === 'production') {
|
|
// Sendgrid
|
|
return nodemailer.createTransport({
|
|
service: 'SendGrid',
|
|
auth: {
|
|
user: process.env.SENDGRID_USERNAME,
|
|
pass: process.env.SENDGRID_PASSWORD
|
|
}
|
|
});
|
|
}
|
|
|
|
return nodemailer.createTransport({
|
|
host: process.env.EMAIL_HOST,
|
|
port: process.env.EMAIL_PORT,
|
|
auth: {
|
|
user: process.env.EMAIL_USERNAME,
|
|
pass: process.env.EMAIL_PASSWORD
|
|
}
|
|
});
|
|
}
|
|
|
|
// Send the actual email
|
|
async send(template, subject) {
|
|
// 1) Render HTML based on a pug template
|
|
const html = pug.renderFile(`${__dirname}/../views/email/${template}.pug`, {
|
|
firstName: this.firstName,
|
|
url: this.url,
|
|
subject
|
|
});
|
|
|
|
// 2) Define email options
|
|
const mailOptions = {
|
|
from: this.from,
|
|
to: this.to,
|
|
subject,
|
|
html,
|
|
text: htmlToText.fromString(html)
|
|
};
|
|
|
|
// 3) Create a transport and send email
|
|
await this.newTransport().sendMail(mailOptions);
|
|
}
|
|
|
|
async sendWelcome() {
|
|
await this.send('welcome', 'Welcome to the Natours Family!');
|
|
}
|
|
|
|
async sendPasswordReset() {
|
|
await this.send(
|
|
'passwordReset',
|
|
'Your password reset token (valid for only 10 minutes)'
|
|
);
|
|
}
|
|
};
|