get-express-starter
Version:
Get production ready express boilerplate with a single command
47 lines (40 loc) • 1.52 kB
text/typescript
import { env } from '@/config';
import { logger } from '@/config/logger';
import { PASSWORD_RESET_REQUEST, PASSWORD_RESET_SUCCESS, VERIFICATION_EMAIL } from '@/utils/emailTemplates';
import nodemailer from 'nodemailer';
const transport = nodemailer.createTransport(env.email.smtp);
if (env.mode !== 'test') {
transport
.verify()
.then(() => logger.info('Connected to email server'))
.catch(() =>
logger.warn('Unable to connect to email server. Make sure you have configured the SMTP options in .env'),
);
}
const sendEmail = async (to: string, subject: string, html: string) => {
const msg = { from: env.email.from, to, subject, html };
await transport.sendMail(msg);
};
const sendResetPasswordEmail = async (to: string, token: string) => {
const subject = 'Reset password';
const resetPasswordUrl = `${env.frontend.url}/reset-password?token=${token}`;
const html = PASSWORD_RESET_REQUEST(resetPasswordUrl);
await sendEmail(to, subject, html);
};
const sendPasswordRestSuccessEmail = async (to: string) => {
const subject = 'Password reset successful';
const html = PASSWORD_RESET_SUCCESS;
await sendEmail(to, subject, html);
};
const sendVerificationEmail = async (to: string, verifyEmailToken: string) => {
const subject = 'Email Verification';
const html = VERIFICATION_EMAIL(verifyEmailToken);
await sendEmail(to, subject, html);
};
export default {
transport,
sendEmail,
sendResetPasswordEmail,
sendVerificationEmail,
sendPasswordRestSuccessEmail,
};