Я не могу создать почтовую систему с Nodemailer - PullRequest
0 голосов
/ 22 января 2020

Я создавал систему в течение нескольких часов. Я почти положил конец проекту, но почему-то не могу получать письма после заполнения формы. Кто-нибудь знает в чем причина этой проблемы ?? Сначала я установил node.js, затем nodemon. У меня есть четыре основных файла и папка в папке проекта - app. js, package-lock. json, contact.handlebars, package. json и node_module.

код ниже - приложение. js

const express = require("express");
const bodyParser = require("body-parser");
const exphbs = require("express-handlebars");
const path = require("path");
const nodemailer = require("nodemailer");

const app = express();

// view engine setup
app.engine("handlebars", exphbs());
app.set("view engine", "handlebars");

// Static folder
app.use("/public", express.static(path.join(__dirname, "public")));

// Body Parser Middleware
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

app.get("/", (req, res) => {
  res.render("contact", { layout: false });
});

app.post("/send", (req, res) => {
  const output = `
        <p>You have a new contact request</p>
        <h3>Contact Details</h3>
        <ul>
            <li>Name: ${req.body.name}</li>
            <li>Company: ${req.body.company}</li>
            <li>Email: ${req.body.email}</li>
            <li>Phone: ${req.body.phone}</li>
        </ul>
        <h3>Message</h3>
        <p>${req.body.message}</p>
    `;
  async function main() {
    // Generate test SMTP service account from ethereal.email
    // Only needed if you don't have a real mail account for testing
    let testAccount = await nodemailer.createTestAccount();

    // create reusable transporter object using the default SMTP transport
    let transporter = nodemailer.createTransport({
      host: "I PUT 1ST SERVERNAME HERE OF HOSTGATOR",
      port: 587,
      secure: false, // true for 465, false for other ports
      auth: {
        user: "MY 1ST EMAIL ACCOUNT", // generated ethereal user
        pass: "********" // generated ethereal password
      },
      tls: {
        rejectUnauthorized: false
      }
    });

    // send mail with defined transport object
    let info = await transporter.sendMail({
      from: '"Nodemailer Contact" <MY 1ST EMAIL ACCOUNT>', // sender address
      to: "MY SECOND EMAIL ACCOUNT", // list of receivers
      subject: "Node Contact Request", // Subject line
      text: "Hello world?", // plain text body
      html: output // html body
    });

    console.log("Message sent: %s", info.messageId);
    console.log("Preview URL: %s", nodemailer.getTestMessageUrl(info));

    res.render("contact", { layout: false }, { msg: "Email has been sent" });
  }

  main().catch(console.error);
});

app.listen(3000, () => console.log("server started..."));

1 Ответ

1 голос
/ 22 января 2020

Тестовый SMTP-сервис Ethereal не отправляет электронные письма. С их веб-сайта:

Это совершенно бесплатный анти-транзакционный почтовый сервис, куда сообщения никогда не доставляются.

Похоже, он позволяет просматривать предварительный просмотр отправленной почты. чтобы убедиться, что ваше приложение работает правильно, но для отправки электронной почты вам необходимо настроить настоящий SMTP-сервер. Вы можете получить учетные данные SMTP для отправки транзакционной почты из приложений различных компаний, таких как SendGrid и Mailgun.

...