Запуск NodeMailer из node_modules в NodeJS из файла JS в проекте

Рейтинг: 0Ответов: 1Опубликовано: 26.06.2023

Всем привет. У меня возникла необходимость отправки почты для заказа, я решил реализовать это на стороне сервера. Пытаюсь подключить NodeMailer из server.js к JS файлу на странице, но у меня не выходит из за неопытности. Я знаю что NodeJS не будет работать в браузере, все же через app.get("/sendemail) прослушивание думал удастся реализовать .

const nodemailer = require("nodemailer");

function sendEmail() {
    return new Promise((resolve, reject) => {
        let transporter = nodemailer.createTransport({
            service: "gmail",
            auth: {
                user: "***@gmail.com",
                pass: "***",
            },
        });

        const mail_option = {
            from: "***@gmail.com",
            to: "***@gmail.com",
            subject: "New Order",
            text: "Your new order has been placed",
        };

        transporter.sendMail(mail_option, function (error, info) {
            if (error) {
                console.log(error);
                return reject(error);
            }
            return resolve({ message: "Your order created successfully" });
        });
    });
}

app.get("/sendemail", (req, res) => {
    sendEmail()
        .then((response) => res.send(response.message))
        .catch((err) => res.status(500).send(err.message));
});

Подскажите плиз как при нажатии кнопки на странице, можно было бы подключить функцию из NodeJS отправки email? Спасибо за внимание

Ответы

▲ 1

То есть у вас есть определенная кнопка отправки (который создает определенный объект с определенными данными, как я полагаю) и отправляет запрос на бэк, на NodeJs, а там уже надо реализовать всё через nodemailer.

  1. Создаем функцию, которая отправляет запрос на сервер. Пример как это делается:
function sendRequest() {
  fetch('/api/sendMail')
    .then(response => response.json())
    .then(data => {
      console.log(data);
    })
    .catch(error => {
      console.error(error);
    });
}
  1. Подключаем функцию к кнопке. Пример как это делается:
const button = document.querySelector('#myButton');
button.addEventListener('click', sendRequest);
  1. В NodeJs мы получаем данные через прослушивание и после того, как получили, отправляем сообщение с помощью nodemailer следующим образом:
// загружаем модуль nodemailer
const nodemailer = require('nodemailer');

// создаем объект транспорта для отправки писем через SMTP
const transporter = nodemailer.createTransport({
  // адрес SMTP сервера
  host: 'smtp.mail.ru', 
  // порт SMTP сервера
  port: 465,
  // Далее мы устанавливаем параметр secure в true, так как необходимо использовать безопасное соединение.
  secure: true,
  // данные для аутентификации на почтовом сервере
  auth: {
    user: 'kkkkk@mail.ru',
    pass: '1234'
  },
  
});

// отправляем письмо
transporter.sendMail({
  // адрес и имя отправителя
  from: '"Data" <kkkkk@mail.ru>',
  // адрес получателя
  to: email,
  // тема письма
  subject: subjectText,
  // текстовая версия письма
  text: textEmail,
  // HTML версия письма
  html: htmlText
})
  .then(() => {
    console.log('Письмо успешно отправлено!');
  })
  .catch((error) => {
    console.error('Ошибка при отправке письма:', error);
  });

Обратите внимание, что у каждого сервиса может быть свой host и port. На сайте сервиса должно быть информация об этом. Например, у mail.ru(в коде я использовал именно mail.ru, но вы можете так же использовать другие сервисы, как, например, gmail) на сайте есть следующая таблица: Таблица с данными о почте.

На этой таблице показан сервер исходящей почты, который я использовал — smtp.mail.ru, а так же порт, который я использовал — 465, который предназначен именно для smtp, как описано на таблице.