使用 Nodemailer 发送电子邮件时出错

Error when sending emails using Nodemailer

server.js:

app.post('/game',(req,res,next)=>{
    //if(!emailValidator(req.body.email)){
      // I would do email validations client side to but if you
      // want to do server side send some html saying the email is invalid
      //res.sendFile(invalidEmail.html)
    //}
    //else{
      //I assume you have some script for sending email. I'll use nodemailer cuz its the first
      //module I found
      let sender = 'myemail@gmail.com'
      let transporter = nodemailer.createTransport({
        service:'gmail',
        auth:{
          user:sender,
          pass:'Mypassword'
        }
      })
      let mailOptions = {
        from: sender,
        to: req.body.email,
        subject:'New sign up',
        text:'Thanks for subscribing'
      }
      transporter.sendMail(mailOptions,function(error,info){
        if(error){
          // do somehting
          console.log(error)
        }
        else{
          console.log('Sent new user email')
          req.next()
        }
      })
    }
    //}
    )

index.html:

<form action="game" method="post" size="30">
    <input type="text" name="email"/>
    <input type="submit" />
</form>

我遇到了这个错误:

TypeError: Cannot read property 'email' of undefined

所以我的代码有这个错误,我正在尝试从 HTML 中的表单使用 Nodemailer 发送电子邮件,有人可以帮我解决这个问题吗?

还有一个用于电子邮件验证的部分,但我删除了它,因为它说“emailValidator”未定义。

在主文件夹中,创建一个 public 文件夹,在其中创建一个 index.html 文件

<!DOCTYPE html>
<html>

<head>
    <title>Simple page</title>
</head>

<body>
   <form action="game" method="post" size="30">
        <input type="text" name="email"/>
        <input type="submit" />
    </form>
</body>

</html>

在主文件夹中,创建一个 server.js 文件

const express = require('express')
const app = express()
const path = require('path')
const bodyParser = require('body-parser')
const nodemailer = require('nodemailer')


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

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

app.get('/', (req, res) => {
    res.sendFile(path.join(__dirname, 'public', 'index.html'))
});


app.post('/game', (req, res) => {
    let senderUsername = 'example@gmail.com' // sender email address
    let senderPassword = 'password'; // senders password

    const transporter = nodemailer.createTransport({
         service: 'Gmail',
         auth: {
                user: senderUsername,
                pass: senderPassword
            }
        });

        const mailOptions = {
          from: senderUsername, // sender address
          to: req.body.email, // list of receivers
          subject: 'New sign up', // Subject line
          html: '<p>Thanks for subscribing.</p>'// plain text body
        };

        transporter.sendMail(mailOptions, function (err, info) {
           if(err)
             console.log(err)
           else {
            console.log('Sent new user email')
            console.log(info);
            req.next() 
           }
    });
})

const PORT = 5000;

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

注意: 使用 google 帐户时,您可能还需要执行这些步骤。

启用设置以允许您正在使用的 Gmail 帐户使用安全性较低的应用程序。 这是link:Google less secure apps

允许访问“显示解锁验证码选项”(允许访问您的 Google 帐户) 这是 link:Google unlock captcha

您还可以探索用于发送电子邮件的 MailJet 或 SendGrid。