【问题标题】:Send data from form input to email with nodemailer使用 nodemailer 将数据从表单输入发送到电子邮件
【发布时间】:2018-01-21 14:47:33
【问题描述】:

我有一个表单,我希望将输入字段中的数据发送到我的电子邮件。我正在使用 nodemailer 将其发送到我的电子邮件。我试过使用 req.body.name(输入字段的名称),但它说它是未定义的。任何的想法? 理想情况下,我希望电子邮件显示 From: XXXX To: XXXX Time: XX:XX Date: XX:XX:XX。

提供表单和 node.js 代码。

    <form action="/send-email" method="post">
  <ul class="inputs">
    <li>
      <label for="from">From</label>
      <input type="text" id="from" name="from" />
    </li>
    <li>
      <label for="to">To</label>
      <input type="text" id="to" name="to" />
    </li>
    <li>
      <label for="date">Date</label>
      <input type="date" id="date" name="date" />
    </li>
    <li>
      <label for="time">Time</label>
      <input type="time" id="time" name="time" />
    </li>
    <li>
      <button>Request</button>
    </li>
  </ul>
</form>

Node.js

    var express = require('express');
var path = require('path');
var app = express();
var bodyParser = require('body-parser');
var nodemailer = require("nodemailer");
var smtpTransport = require('nodemailer-smtp-transport');



app.set('port', 3000);

app.use(express.static(path.join(__dirname, 'public')));

var server = app.listen(app.get('port'), function() {
  var port = server.address().port;
  console.log('Magic happens on port ' + port);
});

var smtpTransport = nodemailer.createTransport(smtpTransport({
  service: 'Gmail',
  auth: {
    user: 'naomikudren@gmail.com',
    pass: '####'
  }
}));

app.post('/send-email', function(req, res) {
    var mailOptions = {
        from: '"Naomi" <naomikudren@gmail.com>', // sender address
        to: "naomikudren@gmail.com", // list of receivers
        subject: 'Request ', // Subject line
        text: req.body.to // plaintext body

    };
        smtpTransport.sendMail(mailOptions, function(error, info) {
         if (error) {
             return console.log(error);
         }
         console.log('Message sent: ' + info.response);
     });

     res.redirect("/index.html");
 });

【问题讨论】:

  • 我看到你没有使用 bodyParser 。我的意思是你需要使用app.use(bodyParser.urlencoded({ extended: false })); app.use(bodyParser.json())

标签: html node.js nodemailer


【解决方案1】:

您没有使用bodyParser。你需要使用

app.use(bodyParser.urlencoded({ extended: false })); 
app.use(bodyParser.json())

【讨论】:

  • 你在哪里使用这个。它替换了哪些代码行,或者它放在了哪些代码行之后。
【解决方案2】:

要完成经过验证的答案,关于在哪里使用 bodyParser,您应该将它放在您的 index.js 或 server.js 文件中,具体取决于您的架构。 例如:

...
app.use(cors());
...
app.use(bodyParser.json());
...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-26
    • 2016-04-17
    • 2019-09-30
    • 1970-01-01
    • 2015-05-19
    相关资源
    最近更新 更多