mysql - 使用 nodemailer 发送邮件,并将表单数据插入 mysql 数据库

标签 mysql node.js express post nodemailer

尝试设置一个表单来接收 Beta 测试电子邮件列表的用户输入,这将向我发送一封包含用户信息的电子邮件,并将相同的表单数据存储到 mysql 数据库中。

我在与 nodemailer 对象相同的路由内有 mysql 连接和查询,但是当提交表单时,我收到一条错误消息,提示“admin is not defined”。这是 transporter 对象中的管理员。我认为如果两个不同的对象(传输器和连接)具有相同的属性名称可能会导致问题,所以我将传输器内部的常规 nodemailer 'user' 更改为 'admin'。

const express = require("express");
const app = express();
const nodemailer = require("nodemailer");
const bodyParser = require("body-parser");
const mysql = require("mysql");

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

// send "Beta" email when user signs up to the email list using the "Beta" form
app.post("/register", function(req, res){
    // connect to database
    const connection = mysql.createConnection({
        host: "localhost",
        user: "root",
        password: "PASSWORD",
        database: "DATABASE_NAME"
    });

    // insert statement
    let insert = "INSERT INTO Beta_Testers(First_Name, Last_Name, Beta_Email) VALUES ('" + req.body.First_Name + "', '" + req.body.Last_Name + "', '" + req.body.Beta_Email + "')";

    // execute the insert statement
    connection.query(insert);

    // disconnect from database
    connection.end();

    // nodemailer objects
    let mailOpts, transporter;

    // email transporter
    transporter = nodemailer.createTransport({
        host: 'smtp.gmail.com',
        port: 3000, // changed from 465
        secure: true,
        auth: {
            admin: "GMAIL_USER",
            pass: "PASSWORD"
        }
    });

    // email credentials
    mailOpts = {
        from: req.body.First_Name + " " + req.body.Last_Name + " <" + req.body.Beta_Email + ">",
        to: admin,
        subject: "You have a new BETA tester!",
        text: `${req.body.Beta_Email} has signed up to be a BETA tester for WEBAPP_NAME. Please confirm sucessful registration into DATABASE_NAME.`
    };

    // send email and verify contact
    transporter.sendMail(mailOpts, function(err, res) {
       if (err) {
           res.render("contact-failure");
       } else {
           res.render("contact-success");
       }
    });
});
ReferenceError: admin is not defined

最佳答案

错误在:“to: admin”

它应该包含一个电子邮件将被发送到的电子邮件。这些是 mail_options,选项“to”需要设置为像“abc@xyz.com”这样的电子邮件。

你可以设置:-

到:req.body.email

关于mysql - 使用 nodemailer 发送邮件,并将表单数据插入 mysql 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56782466/

相关文章:

java - 将下拉值拉入整数

node.js - NEXT.JS:无法使用 getInitialProps 连接到 mongoDB 数据库

node.js - 带有 Express.js 的 SOAP 服务器

node.js - 如何在aws lambda函数中添加外部模块?

javascript - req.cookies 返回 undefined 但 cookie 已设置

javascript - Node js 路由与 ejs res.render 不起作用,但 res.send 起作用

android - 防止 SQLite 数据库中的数据重复

php - 将 Angular 6 应用程序连接到 DreamHost 上托管的 php/mysql 数据库的服务

php - mysql_query 在 session 期间不更新数据库

javascript - 覆盖 app.get ('*' , func) 中的路由