'Nodemailer - How to send OTP using Nodemailer in React JS?
Hello Community I am stuck at one point. I want to develop on functionality in this functionality when we call email send route it will also send the OTP.
I am developed two functions one is for email send and one is for nodemailer.
Email sent function
const emailSend = async (req,res)=>{
let data = await users.findOne({email: req.body.email})
const responseType = {};
if(data){
let otpCode = Math.floor((Math.random()*10000)+1);
let otpData = new otp({
email: req.body.email,
code: otpCode,
expiresIn: new Date().getTime() + 300*1000
})
let otpResponse = await otpData.save();
responseType.statusText = 'Success'
responseType.message = 'Please check your email id'
}
else{
responseType.statusText = 'Error'
responseType.message = 'Email id not exist'
}
res.status(200).json(responseType);
}
Nodemailer function
const mailer = () =>{
var transporter = nodemailer.createTransport({
service: 'gmail',
port: 587,
secureConnection: false,
auth: {
user: 'Your Email',
pass: 'Your Password'
}
});
var mailOptions = {
from: 'sender address',
to: 'list of receivers',
subject: 'Test',
text: "Hello",
};
transporter.sendMail(mailOptions, function(error, info){
if (error) {
console.log(error.message);
}
console.log('Email Sent: '+ info);
});
}
When I hit email sent URL on Postman tool it will send the email but I want send email as well as OTP is also send.
Thanks in advance.
Solution 1:[1]
const nodemailer = require('nodemailer');
const sendMail = async function (mailModel) {
try {
const transporter = nodemailer.createTransport({
service: config.mailer.service,
host: config.mailer.host,
port: config.mailer.port,
secure: config.mailer.secure,
service: 'gmail',
host: 'smtp.gmail.com',
port: 465,
secure: false,
auth: {
user: "email address",
pass: 'password'
},
});
return new Promise(function (resolve, reject) {
let mailOptions = {
from: mailModel.from || 'default email',
to: mailModel.to,
subject: mailModel.subject,
html: mailModel.html
};
transporter.sendMail(mailOptions, function (err, info) {
mailOptions.err = err;
mailOptions.info = info;
mailOptions.status = (info !== null || info !== undefined);
if (err) {
console.log(err);
reject(err);
} else {
console.log(info);
resolve(info);
}
});
});
} catch (error) {
console.log("email Error :", error);
return Promise.reject(error)
}
}
const genrateOTP = () => {
// otp logic
return '123'
}
const otp = genrateOTP()
sendMail({
to: '[email protected]',
subject: 'OTP',
html: otp
})
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Saif Ali |
