我有一个应用程序,可以在用户丢失密码时向用户发送电子邮件,然后可以恢复。 我使用 Hostgator 电子邮件发送电子邮件。 我使用 app.cyclo.sh 部署我的 backct 我想知道是否有人有一些想法,为什么在本地主机中工作而不是在部署模式下工作。 我将所有变量都以循环方式上传和保存。 我有这个代码来发送电子邮件:
恢复Email.js:
const transporter = require("./transporter");
const restorePasswordEmail = /* async */ (datos) => {
const { nombre, email, id } = datos;
console.log("DATOS MAIL", datos);
const mailData = {
from: "[email protected]",
to: email,
subject: "Recupera tu Contraseña",
text: "Recupera tu Contraseña",
html: `<p> Hola: ${nombre}, has solicitado reestablecer tu contraseña para tu cuenta en WindyMarket. </p>
<p>Sigue el siguiente enlace para generar una nueva contraseña en: <a href="${process.env.FRONTEND_URL}/forgotpassword/${id}">Resetear Password WindyMarket</a></p>
<p>Si tu no has registrado una cuenta en WindyMarket, no hagas caso de este correo, debe haber sido un error.
Disculpa las molestias </p>`,
};
new Promise((resolve, reject) => {
transporter.sendMail(mailData, function (error, response) {
if (error) {
reject(error);
} else {
console.log(JSON.stringify(response));
resolve("email sent");
}
});
});
};
module.exports = restorePasswordEmail;
transporter.js:
const nodemailer = require("nodemailer");
const transporter = nodemailer.createTransport({
name: "hostgator",
host: process.env.EMAIL_HOST,
port: process.env.EMAIL_PORT,
secure: true,
auth: {
user: process.env.EMAIL_USER,
pass: process.env.EMAIL_PASS,
},
});
module.exports = transporter;
当我在本地主机中使用它时,工作完美,但是当我在部署 backct 的地方使用 throw app.circular.sh 时,不起作用。 在循环内的日志中我没有任何错误。 只需显示第一个 console.log("DATOS MAIL", datos); 但不是新 Promise 中的控制台。
忘记密码功能是使用恢复密码电子邮件的功能:
exports.forgotPassword = async (req, res) => {
const { email } = req.body;
let user = await User.findOne({ email });
if (!user) {
return res.status(400).json({ msg: "El Usuario no Existe" });
} else {
try {
// Enviar Email con instrucciones
restorePasswordEmail({
id: user._id,
email,
nombre: user.nombre,
});
return res.status(200).json({ msg: "Hemos enviado un email con las instrucciones" });
} catch (error) {
console.log(error);
}
}
};
我尝试使用异步等待和承诺,但在部署模式下不起作用。
谢谢
你可以尝试
await restorePasswordEmail
当你写作时
if (!user) {
return res.status(400).json({ msg: "El Usuario no Existe" });
}
你不需要 else 语句,因为返回将在那里结束函数
你应该用 try 和 catch 包装整个函数
exports.forgotPassword = async (req, res) => {
try {
const { email } = req.body;
let user = await User.findOne({ email });
if (!user) {
return res.status(400).json({ msg: "El Usuario no Existe" });
}
// Enviar Email con instrucciones
await restorePasswordEmail({
id: user._id,
email,
nombre: user.nombre,
});
return res.status(200).json({ msg: "Hemos enviado un email con las instrucciones" });
} catch (error) {
console.log(error);
}
};
我有同样的问题,我尝试联系他们,但没有得到他们的任何回复。我觉得不行