使用nodemailer和hostgatore从循环发送邮件

问题描述 投票:0回答:2

我有一个应用程序,可以在用户丢失密码时向用户发送电子邮件,然后可以恢复。 我使用 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);
    }
  }
};

我尝试使用异步等待和承诺,但在部署模式下不起作用。

谢谢

node.js deployment nodemailer
2个回答
0
投票

你可以尝试

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);
  }
};

0
投票

我有同样的问题,我尝试联系他们,但没有得到他们的任何回复。我觉得不行

© www.soinside.com 2019 - 2024. All rights reserved.