让 nodeJS Web 服务器将表单数据发送到我的电子邮件

时间:2021-06-15 19:45:35

标签: javascript node.js nodemailer

我正在尝试获取我的 nodeJS 服务器从前端表单接收的数据,以将该数据发送到我的电子邮件。我曾尝试使用 nodemailer 并没有取得多大成功。有人能告诉我下面的代码我做错了什么吗?

const express = require("express");
const app = express();
const nodemailer = require("nodemailer");
var smtpTransport = require("nodemailer-smtp-transport");

const PORT = process.env.PORT || 4000;

app.use(express.static(__dirname + "/front-end"));

app.get("/", (req, resp) => {
  resp.sendFile(__dirname + "/front-end/index.html");
});

app.use(express.json());
app.use(express.urlencoded());

app.post("/formData", (req, resp) => {
  const data = req.body;

  var transport = nodemailer.createTransport(
    smtpTransport({
      service: "Gmail",
      auth: {
        user: "user@gmail.com",
        pass: "123456",
      },
    })
  );

  transport.sendMail(
    {
      //email options
      from: "Sender Name <email@gmail.com>",
      to: "Receiver Name <receiver@email.com>", // receiver
      subject: "Emailing with nodemailer", // subject
      html: data, // body (var data which we've declared)
    },
    function (error, response) {
      //callback
      if (error) {
        console.log(error);
      } else {
        console.log("Message sent:");
        resp.send("success!");
      }

      transport.close();
    }
  );
});

app.listen(PORT, () => {
  console.log(`server running on port ${PORT}`);
});

1 个答案:

答案 0 :(得分:0)

乍一看,您的代码对我来说看起来不错。我认为问题是(因为你没有说明你已经设置了),你想用 GMail 发送电子邮件。如果您想通过 Gmail 从您自己的应用程序或网络服务发送电子邮件,您应该在 Google Cloud Platform 中设置一个项目。 Read more here

或者,您可以使用 Postmark 之类的服务,您可以将其配置为通过您拥有的域发送电子邮件。有免费试用。 Mailgun 是一个类似的服务。 (我不隶属于任何一个)。