easy-express-cwa
Version:
CLI tool to setup a common Express.js backend developed by codewithashim
122 lines (116 loc) • 3.2 kB
text/typescript
import nodemailer from "nodemailer";
import config from "../config";
class Mail {
sendOne(subject: string, from: string, to: string, content: string) {
const transporter = nodemailer.createTransport({
service: "gmail",
secure: true,
host: "smtp.gmail.com",
port: 465,
auth: {
user: config.google.appUser,
pass: config.google.appPass,
},
});
const mailOptions = {
from: from,
to: to,
subject: subject,
html: `
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<p>${content}</p>
</body>
</html>
`,
};
transporter.sendMail(mailOptions, function (error, info) {
if (error) {
console.log(error);
} else {
console.log(info);
}
});
}
async sendResetPasswordLink(to: string, link: string) {
const transporter = nodemailer.createTransport({
service: "gmail",
secure: true,
host: "smtp.gmail.com",
port: 465,
auth: {
user: config.google.appUser,
pass: config.google.appPass,
},
});
const mailOptions = {
from: `Team Manager <${config.google.appUser}>`,
to: to,
subject: "Reset Password",
html: `
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
body {
font-family: Arial, sans-serif;
background-color: #f7f7f7;
margin: 0;
padding: 0;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
}
.container {
background-color: #ffffff;
padding: 20px;
border-radius: 8px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
width: 100%;
max-width: 600px;
}
h1 {
color: #333333;
}
p {
color: #555555;
}
a {
display: inline-block;
margin-top: 20px;
padding: 10px 20px;
color: white;
background-color: #007BFF;
border-radius: 5px;
text-decoration: none;
}
a:hover {
background-color: #0056b3;
}
</style>
</head>
<body>
<div class="container">
<h1>Password Reset Request</h1>
<p>This link will be expired in 10 minutes</p>
<p>We received a request to reset your password. Click the link below to reset it:</p>
<a style="color: white" href="${link}">Reset Password</a>
<p>If you did not request a password reset, please ignore this email or contact support if you have questions.</p>
</div>
</body>
</html>
`,
};
const info = await transporter.sendMail(mailOptions);
return info;
}
}
export const MailUtilService = new Mail();