NodeJS 为什么节点mailer无法发送电子邮件在一个私人主机上,而它的作品在localhost和渲染良好

tkclm6bt  于 2023-10-17  发布在  Node.js
关注(0)|答案(1)|浏览(157)

我正面临一个问题,通过nodemailer发送电子邮件给我的客户。我正在使用一个共享主机与cpanel。它不会从它发送电子邮件,而它从其他主机发送。
下面是我的代码中发送电子邮件的函数。

const transporter = mailer.createTransport({
  service: "gmail",
  auth: {
    user: process.env.MAIL,
    pass: process.env.MAIL_PASS,
  },
});

app.post("/send", (req, res) => {
  const data = {
    name: req.body.name,
    mail: req.body.mail,
    phone: req.body.phone,
    msg: req.body.msg,
    title: "new message form contact section",
  };

  if (data.phone.length == 0) {
    data["phone"] = "not given!";
  }

  ejs.renderFile("./views/mail.ejs", data, function (err, ejsout) {
    transporter.sendMail({
      from: process.env.MAIL,
      to: "***********@gmail.com",
      subject: "Support request 👮‍♂️",
      html: ejsout,
    });
    res.render("msg", { msg: "Message was send successfully!" });
  });
});

此外,我已经检查了我的应用程序是否可以访问.env文件并读取它。它可能会起作用。我试图重新启动应用程序,问题仍然存在。
我应该使用另一个node js库吗?

edit我已经更新了我的代码,它给了我错误消息,而使用渲染主机它发送给我,它是成功的。

ejs.renderFile("./views/mail.ejs", data, async function (err, ejsout) {
    await new Promise((resolve, reject) => {
      transporter.sendMail(
        {
          from: process.env.MAIL,
          to: "*********@gmail.com",
          subject: "Support request 👮‍♂️",
          html: ejsout,
        },
        (err, info) => {
          if (err) {
            res.render("msg", {
              msg: "Error there is a problem sending your message! Please Contact us via Email.",
            });
          } else {
            res.render("msg", { msg: "Message was send successfully!" });
          }
        }
      );
    });
  });
u1ehiz5o

u1ehiz5o1#

不要使用Gmail,而是使用您的主机电子邮件地址。
您可以通过导航您的电子邮件,然后使用电子邮件,密码,SMTP,主机轻松地在cPanel中获得您的电子邮件地址设置。

相关问题