Отправьте электронное письмо с помощью nodemailer и вставьте данные формы в базу данных mysql. - PullRequest
1 голос
/ 27 июня 2019

Попытка настроить форму, которая получает пользовательский ввод для списка адресов электронной почты бета-тестирования, который отправит мне электронное письмо с информацией о пользователе и сохранит те же данные формы в базе данных mysql.

У меня естьMySQL соединение и запрос внутри того же маршрута, что и объекты nodemailer, но когда форма отправлена, я получаю сообщение об ошибке, что «admin не определен».Это админ в транспортном объекте.Я подумал, что это может вызвать проблемы, если два разных объекта (tranporter и connection) имеют одно и то же имя свойства, поэтому я изменил обычный usermailer '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

1 Ответ

0 голосов
/ 28 июня 2019

Ошибка в: "to: admin"

Он должен содержать электронное письмо, на которое будет отправлено письмо. Это mail_options, и параметр «to» должен быть установлен с электронной почтой, такой как «abc@xyz.com».

Вы можете установить: -

to: req.body.email

...