Отправка электронных писем из приложения react зарегистрированным пользователям через express api / nodemailer

#node.js #reactjs #express #authentication #nodemailer

#node.js #reactjs #экспресс #аутентификация #nodemailer

Вопрос:

Цель: я работаю над побочным проектом, который использует React для интерфейса и Express.js для бэкэнда. Моя цель — отправлять электронные письма с подтверждением зарегистрированным пользователям через nodemailer с использованием express api.

Прогресс:

Я настроил HTTPS для своего приложения react, которое находится в Amazon s3, через Cloudfront и route53. Я сделал это, прикрепив доменное имя (https://www.example.com ) к дистрибутиву cloudfront через Route53. Я использовал AWS ACM для создания сертификата.

Мой серверный код находится в экземпляре EC2, я настроил HTTPS для серверного API api.example.com . Я использовал certbot для настройки lets encrypt cert и указал имя сервера nginx на api.example.com чтобы настроить HTTPS.

Я настроил серверный API для уведомления зарегистрированных пользователей. Я отправляю электронные письма с помощью nodemailer.

 const nodemailer = require("nodemailer");

const transporter = nodemailer.createTransport({
  service: "gmail",
  auth: {
    user: process.env.USERNAME,
    pass: process.env.PWD
  },
});

exports.emailAck = function (req, res) {
  const mailOptions = {
    from: 'Testing email',
    to: req.body.email,
    subject: "Thank you for submitting the request for :  "   req.body.id,
    text: "TBD",
  };

  transporter.sendMail(mailOptions, function (error, info) {
    if (error) {
        res.json({status: "error", message: error});
    }
    else {
        res.json({ status: "success", message: "Email sent" });
    }
});
};
 

Проблема:

  1. Мои электронные письма отправляются только тогда, когда я включаю разрешить менее защищенные приложения в gmail.. Несмотря на то, что мое приложение защищено, я не уверен, почему это происходит

введите описание изображения здесь

  1. Когда я пытаюсь сохранить свои учетные данные для аутентификации transporter в файле .env для защиты секретов, я вижу ошибку: отсутствуют учетные данные для «ПРОСТОЙ» ошибки, но если я попытаюсь добавить открытый текст в указанный ниже файл, это сработает.

Я использую https://www.npmjs.com/package/react-google-login на стороне реакции, чтобы настроить функциональность входа в систему.

Мне интересно, должен ли я ограничить свой серверный api в EC2, чтобы просто разрешить доступ к приложению react, чтобы оно не считалось менее безопасным приложением…

Я был бы признателен за любое направление по двум вышеупомянутым вопросам, если есть лучшее решение, отличное от node mailer, я готов попробовать его.

Заранее спасибо. Я могу прояснить любые вопросы в правках, если что-то неясно, поэтому, пожалуйста, дайте мне знать.

Комментарии:

1. Это большие усилия! Помимо технической точки зрения. Я бы посоветовал вам использовать поставщика услуг электронной почты вместо настройки собственной электронной почты на сервере. Это не цель вашей учетной записи gmail. Например, я бы зарегистрировал домен и использовал «SendGrid» для обработки службы электронной почты. Одним из преимуществ этого является то, что это избавляет вас от необходимости настраивать ваш сервер (вам просто нужно вызвать конечную точку отправки электронной почты Sendgrid), это снижает риск того, что ваше электронное письмо будет считаться спамом (вы никогда не сможете отменить это …) … и т.д. и т.п.

2. О, я вижу, интересно — спасибо, Ник, за информацию, я загляну в SendGrid

3. Прочитайте nodemailer.com/usage/using-gmail а заключение в конце? tldr; используйте выделенный провайдер или OAuth2

Ответ №1:

Для проблемы № 2, если вы используете пакет dotenv для переменных среды, вы должны загрузить конфигурацию следующим образом в свой js-файл

 require('dotenv').config()
 

Комментарии:

1. Я тоже пробовал это, я все еще видел ту же ошибку