为什么节点邮件程序无法在私有主机上发送电子邮件,而它在本地主机和渲染上运行良好

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

我在通过 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 库吗?

编辑 我已将我的代码更新为该代码,并且在使用渲染托管时它给了我错误消息,它向我发送了成功的消息。

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!" });
          }
        }
      );
    });
  });
node.js express cpanel nodemailer shared-hosting
1个回答
1
投票

请勿使用 Gmail,而应使用您的主机电子邮件地址。

您可以通过导航电子邮件在 cPanel 中轻松获取电子邮件地址设置,然后使用电子邮件、密码、SMTP、主机。

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