1

我在 nodemailer 中未定义 req.body 的问题。

React:我已经编写了整个函数,并且所有数据都正确传递。console.log(data) 给了我正确的对象。

 axios
  .post(`${this.state.API_URL}/email/send`, JSON.stringify(data))
  .then((response) => {
  });

Express:只是 nodemailer 的重要部分。

const express = require("express");
const bodyParser = require("body-parser");
const app = express();
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
const emailRoute = require("./routes/api/emailRoute");
app.use("/email", emailRoute);

电子邮件路由:

 router.post("/send", async (req, res) => {
  const EmailAddress = process.env.EMAIL_ADDRESS;
  const transporter = nodemailer.createTransport({
    service: "hotmail",
    auth: {
      user: EmailAddress,
      pass: process.env.EMAIL_PASS,
    },
  });

  await transporter.sendMail(
    {
      from: req.body.email,
      to: EmailAddress,
      subject: "Email from app",
      text: `name: ${req.body.name} 
      current-role: ${req.body.role} 
      sports-car: ${req.body.enthusiast} 
      comment: ${req.body.comment}`,
    },
    (err, data) => {
      if (err) {
        res.sendStatus(503).json(err);
      } else {
        res.sendStatus(200).json("email sent");
      }
    }
  );
});

我正在将电子邮件发送到我的电子邮件帐户,但这就是我得到的。

from [unknown]
      name: undefined
      current-role: undefined
      sports-car: undefined
      comment: undefined

我究竟做错了什么 ?

谢谢你。

4

2 回答 2

1

我终于让它工作了。所以没有 JSON.stringify(data) 只是 axios 中的数据。

 axios
.post(`${this.state.API_URL}/email/send`, data)
.then((response) => {
});

并在 emailRoute

  const EmailAddress = process.env.EMAIL_ADDRESS;
 const transporter = nodemailer.createTransport({
service: "hotmail",
auth: {
  user: EmailAddress,
  pass: process.env.EMAIL_PASS,
},
});


 await transporter.sendMail(
{
  from: EmailAddress,
  to: EmailAddress,
  subject: "Email from app",
  text: 
 `name: ${req.body.name} 
  email: ${req.body.email}
  current-role: ${req.body.role} 
  sports-car: ${req.body.enthusiast} 
  comment: ${req.body.comment}`,
 }

“用户”和“发件人”的电子邮件地址应该相同。我以为我可以使用发件人的电子邮件作为我从 React 中的表单获得的“发件人”,但我想不是。对于我的情况,我从我的同一个电子邮件帐户发送和接收电子邮件,我只是在“文本”中传递发件人的电子邮件地址。

于 2020-11-05T09:52:58.363 回答
0

您必须在每个路由器中使用正文解析器!因此,如果您没有将其添加到电子邮件路由,请添加它!一切顺利

于 2020-11-04T03:42:01.633 回答