Здравствуйте, несколько месяцев назад я написал статью о том, как отправлять электронную почту с помощью NodeJs. Посмотрите статью здесь.
Хотя метод, описанный в блоге, работает хорошо, в его использовании есть несколько недостатков.
Сегодня я расскажу вам о лучшем способе отправки электронной почты в NodeJs.
Необходимые условия
🎯 Установите NodeJS
🎯 Основы NodeJS RestAPI
Настройка
Зайдите в консоль разработчика google и создайте новый проект, добавьте имя проекта и нажмите кнопку создать.
Переключитесь на проект, который вы только что создали. Я назвал свой Luther
.
Создайте учетные данные API, нажмите на меню гамбургер и перейдите к API и Services
.
Давайте получим наши учетные данные
Нажмите на учетные данные
Нажмите на OAuth ClientId
Нажмите на экран настройки согласия
Нажмите на создать
Настройте экран
Добавьте название вашего приложения, электронную почту и логотип в выделенное поле
Нажмите Сохранить и продолжить
Нажмите сохранить и продолжить, оставив все остальные настройки по умолчанию
Снова нажмите на значок создания учетных данных
Нажмите Oauth CLient Id
Выберите тип приложения
Добавьте ваше перенаправление и нажмите кнопку создать
Вы получите clientID и секрет, которые вы можете скачать или скопировать в безопасное место.
Настройте OAuth
Перейдите по этому адресу https://developers.google.com/oauthplayground и нажмите на значок шестеренки.
Нажмите использовать собственные учетные данные
Введите clientID и секретный ключ, который вы сохранили ранее.
Далее введите этот url: https://mail.google.com/ в выделенное оранжевым цветом поле ниже.
Нажмите на кнопку authorized api и выберите email, который вы хотите авторизовать Fig X
Исправление ошибки -> Иногда на этом этапе возникает ошибка авторизации.
Чтобы исправить это, давайте авторизуем наше приложение, перейдите на приборную панель и нажмите на экран согласия OAuth
Нажмите на публикацию
Повторите процесс Fig X, и вы попадете на эту страницу.
Нажмите на кнопку Advanced, затем на кнопку unsafe.
Нажмите на продолжить
Вы должны быть перенаправлены обратно на страницу OAuth
Нажмите на обмен кода авторизации на токен в разделе Шаг 2.
В результате будут сгенерированы токен обновления, токен доступа и код авторизации. Скопируйте и сохраните их в безопасном месте.
Теперь, когда мы получили учетные данные api google console, давайте создадим наше NodeJS-приложение с помощью ExpressJS.
Инциализация приложения NodeJs
npm init -y
Установите зависимости для разработки
npm i express nodemailer googleapis
Создайте сервер NodeJS
index.js
Создайте модель пользователя
models/user.model.js
Создайте маршрут пользователя
routes/user.route.js
const router = express.Router();
// signup
router.post('/signup', userSignup);
//...
modeule.exports = router;
Создайте свое приложение nodejs и создайте внутри него почтовую папку
const nodemailer = require('nodemailer');
const { google } = require('googleapis');
const OAuth2 = google.auth.OAuth2;
const oauth2Client = new OAuth2(
'put client id here',
'put client secret here', // Client Secret
'https://developers.google.com/oauthplayground' // Redirect URL
);
oauth2Client.setCredentials({
refresh_token:
' add your refresh token here',
});
const accessToken = oauth2Client.getAccessToken();
const sendEmail = async (options) => {
const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
type: 'OAuth2',
user: 'put your email here',
clientId:
'put your client id here',
clientSecret: 'put your client secret here',
refreshToken:
'put your refresh token here',
accessToken: accessToken,
},
tls: {
rejectUnauthorized: false,
},
});
try {
const message = {
from: "put your email here",
to: options.email,
subject: options.subject,
text: options.message,
html: options.message,
};
const m = await transporter.sendMail(message);
console.log(m);
} catch (error) {
console.log(error);
return error;
}
};
module.exports = sendEmail;
Затем в вашем файле user.controller.js
const User = require('../models/user.model');
const House = require('../models/house.model');
const bcrypt = require('bcrypt');
const jwt = require('jsonwebtoken');
const sendEmail = require('../mail/email-sender');
exports.userSignup = async (req, res) => {
const { password, email, name } = req.body;
try {
// hash password
const salt = await bcrypt.genSalt(10);
const hashedPassword = await bcrypt.hash(password, salt);
const user = await User.create({
name,
email,
password: hashedPassword,
});
await sendEmail({
email: user.email,
subject: `${user.name} Registered Successfully`,
message: `<div>
<h1>HELLO ${user.name}</h1>
<h2>You just registered successfully</h2>
</div>`,
});
return res
.status(201)
.json({ message: 'User created successfully', userId: user._id });
} catch (error) {
console.log(error);
if (error.message.includes('duplicate key error')) {
return res
.status(200)
.json({ message: `${error.message.split('{')[1]} already exist` });
}
return res
.status(500)
.json({ error: error.message, message: 'internal server error' });
}
};
⚠️: Убедитесь, что вы используете свой .env
для хранения учетных данных.
Тестирование нашего API
Давайте протестируем наш API с помощью postman
Проверьте интегрированный терминал на наличие вывода
Проверьте электронную почту
🕺🏻🕺🏻🕺🏻🕺🏻🕺🏻🕺🏻 Это сработало
Заключение
Надеюсь, этот пост был полезен для отправки электронной почты с помощью NodeJS.
Спасибо за прочтение