Уведомления по электронной почте имеют решающее значение для современных веб-приложений. В этом руководстве мы создадим безопасную службу уведомлений по электронной почте, используя Express.js и аутентификацию OAuth2 Gmail. Наш сервис будет принимать запросы вебхуков и автоматически отправлять электронные письма на основе входящих данных.
Мы создадим экспресс-сервер, который:
Сначала установите необходимые пакеты:
npm install express body-parser nodemailer googleapis dotenv
Создайте файл .env со своими учетными данными:
CLIENT_ID=your_client_id CLIENT_SECRET=your_client_secret REDIRECT_URI=your_redirect_uri REFRESH_TOKEN=your_refresh_token [email protected]
Если у вас возникнут какие-либо трудности с настройкой этих учетных данных, как это сделал я, вы можете выполнить следующие действия...
Шаг 1. Создайте новый проект Google Cloud:
а. Перейдите на https://console.cloud.google.com/
б. Нажмите на раскрывающийся список проектов вверху страницы
в. Нажмите «Новый проект»
д. Введите название проекта и нажмите «Создать»
Шаг 2. Включите API Gmail:
а. На левой боковой панели перейдите в раздел «API и службы» > «Библиотека»
б. Найдите «API Gmail»
в. Нажмите «Gmail API», а затем нажмите «Включить».
Шаг 3. Настройте экран согласия OAuth:
а. Перейдите в раздел «API и службы» > «Экран согласия OAuth»
б. Выберите «Внешний» в качестве типа пользователя и нажмите «Создать»
в. Заполните необходимые поля:
- Название приложения: [Название вашего приложения]
- Электронная почта службы поддержки пользователей: [Ваша электронная почта]
- Контактная информация разработчика: [Ваша электронная почта]
д. Нажмите «Сохранить и продолжить»
е. На странице «Области» нажмите «Добавить или удалить области»
ф. Найдите и выберите область действия «https://mail.google.com/»
г. Нажмите «Обновить», а затем «Сохранить и продолжить».
час На странице «Тестовые пользователи» нажмите «Добавить пользователей»
я. Добавьте свой адрес Gmail и нажмите «Сохранить и продолжить»
Дж. Просмотрите сводку и нажмите «Вернуться на панель управления»
Шаг 4. Создайте учетные данные OAuth2:
а. Перейдите в раздел «API и службы» > «Учетные данные»
б. Нажмите «Создать учетные данные» > «Идентификатор клиента OAuth»
в. Выберите «Веб-приложение» в качестве типа приложения
д. Имя: [Название вашего приложения]
е. Авторизованные источники JavaScript: добавьте домен вашего сервера (например, http://localhost:3000 для локальной разработки)
ф. Разрешенные URI перенаправления:
- Добавить: https://developers.google.com/oauthplayground
– Добавьте URL обратного вызова вашего сервера, если он у вас есть (например, http://localhost:3000/auth/google/callback)
г. Нажмите «Создать»
час Во всплывающем окне отобразятся ваш идентификатор клиента и секрет клиента. Сохраните их в надежном месте.
Шаг 5. Получите новый токен обновления:
а. Перейдите на https://developers.google.com/oauthplayground/
б. Нажмите на значок шестеренки («Настройки лайка») в правом верхнем углу
в. Установите флажок «Использовать собственные учетные данные OAuth»
д. Введите новый идентификатор клиента и секрет клиента
е. Закройте настройки
ф. На левой боковой панели найдите «Gmail API v1»
г. Выберите https://mail.google.com/
час Нажмите «Авторизовать API»
я. Выберите свою учетную запись Google и предоставьте запрошенные разрешения
Дж. На следующем экране нажмите «Обменять код авторизации на токены»
к. Скопируйте «Обновить токен» из ответа
Если у вас возникнут какие-либо проблемы во время этого процесса или при тестировании функциональности электронной почты, укажите в комментариях конкретные сообщения об ошибках или поведение, которое вы видите.
Давайте разберем реализацию шаг за шагом:
const express = require("express"); const bodyParser = require("body-parser"); const nodemailer = require("nodemailer"); const { google } = require("googleapis"); require("dotenv").config(); const app = express(); app.use(bodyParser.json());
В этом разделе настраивается наш Express-сервер и импортируются необходимые зависимости. Мы используем body-parser для анализа запросов JSON и dotenv для управления переменными среды.
const oAuth2Client = new google.auth.OAuth2( CLIENT_ID, CLIENT_SECRET, REDIRECT_URI ); oAuth2Client.setCredentials({ refresh_token: REFRESH_TOKEN });
Мы создаем клиент OAuth2, используя библиотеку аутентификации Google. Это обеспечивает обновление токена и аутентификацию с помощью API Gmail.
async function sendEmail(webhookData) { const { receiver_email, //change data based on your needs } = webhookData; try { const accessToken = await oAuth2Client.getAccessToken(); const transport = nodemailer.createTransport({ service: "gmail", auth: { type: "OAuth2", user: process.env.EMAIL_USER, clientId: CLIENT_ID, clientSecret: CLIENT_SECRET, refreshToken: REFRESH_TOKEN, accessToken: accessToken, }, }); const mailOptions = { from: `Your Name `, to: receiver_email, subject: ``, //Add Subject of Email html: ``, // Add your HTML template here }; return await transport.sendMail(mailOptions); } catch (error) { console.error("Error in sendMail function:", error); throw error; } }
Эта функция:
app.post("/webhook", async (req, res) => { try { const webhookData = req.body; await sendEmail(webhookData); res.status(200).send("Email sent successfully"); } catch (error) { console.error("Error processing webhook:", error); res.status(500).send("Error processing webhook"); } });
Конечная точка нашего вебхука:
Проверьте свой вебхук с помощью Curl или Postman:
curl -X POST http://localhost:4000/webhook \ -H "Content-Type: application/json" \ -d '{ "receiver_email": "[email protected]", }'
Распространенные проблемы и решения:
Теперь у вас есть безопасная система уведомлений по электронной почте с OAuth2 аутентификацией! Эта реализация обеспечивает прочную основу для создания более сложных систем уведомлений, сохраняя при этом безопасность и надежность.
Надеюсь, этот пост будет полезен вам при настройке службы электронной почты.
Удачного программирования! ?
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3