Intento hacer una función separada para nodemailer y esperar booleano verdadero o falso a cambio. Pero cuando el correo se envía al usuario, recibo el correo en la cuenta, pero después de eso, en lugar de verdadero o falso, obtengo un valor indefinido. .
function nodeMailer(mailOptions){ var transporter = nodemailer.createTransport({ service: 'gmail', auth: { user: get.username, pass: get.password }, tls: { rejectUnauthorized : false } }); transporter.sendMail(mailOptions, (error, info) => { if(error) return false; return true; }); }No está definido, porque true o false debería devolver su función nodeMailer y no transporter.sendMail . En este caso, puede crear Promise que puede ayudarlo con eso.
var nodeMailer = function(mailOptions) { return new Promise(function(resolve, reject){ var transporter = nodemailer.createTransport({ service: 'gmail', auth: { user: get.username, pass: get.password }, tls: { rejectUnauthorized : false } }); transporter.sendMail(mailOptions, (error, info) => { if(error) reject(error); resolve(info); }); } }); }y luego llame a su promesa como a continuación
nodeMailer(yourOptions).then(function(result) { // handle success result here return info; }) .catch(function(err) { // handle your error here })más acerca de las promesas se puede leer aquí . Son muy útiles cuando necesita controlar su flujo asíncrono.
Intente esto usando devolución de llamada o promesa.