«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Создайте профессиональную службу электронной почты: Gmail OAuth Express + Webhooks

Создайте профессиональную службу электронной почты: Gmail OAuth Express + Webhooks

Опубликовано 3 ноября 2024 г.
Просматривать:957

Уведомления по электронной почте имеют решающее значение для современных веб-приложений. В этом руководстве мы создадим безопасную службу уведомлений по электронной почте, используя Express.js и аутентификацию OAuth2 Gmail. Наш сервис будет принимать запросы вебхуков и автоматически отправлять электронные письма на основе входящих данных.

Что мы строим

Мы создадим экспресс-сервер, который:

  • Получает данные вебхука через POST-запросы
  • Аутентификация в Gmail с использованием OAuth2
  • Отправляет настроенные электронные письма на основе полезной нагрузки вебхука
  • Элегантная обработка ошибок

Предварительные условия

  • На вашем компьютере установлен Node.js
  • Проект Google Cloud Console с включенным Gmail API
  • Учетные данные OAuth2 (идентификатор клиента, секрет клиента, токен обновления)
  • Базовое понимание Express.js и async/await

Настройка проекта

Сначала установите необходимые пакеты:

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/
б. Нажмите на раскрывающийся список проектов вверху страницы
в. Нажмите «Новый проект»
д. Введите название проекта и нажмите «Создать»

Build a Professional Email Service: Gmail OAuth Express   Webhooks

Шаг 2. Включите API Gmail:
а. На левой боковой панели перейдите в раздел «API и службы» > «Библиотека»
б. Найдите «API Gmail»
в. Нажмите «Gmail API», а затем нажмите «Включить».

Build a Professional Email Service: Gmail OAuth Express   Webhooks


Шаг 3. Настройте экран согласия OAuth:
а. Перейдите в раздел «API и службы» > «Экран согласия OAuth»
б. Выберите «Внешний» в качестве типа пользователя и нажмите «Создать»
в. Заполните необходимые поля:
- Название приложения: [Название вашего приложения]
- Электронная почта службы поддержки пользователей: [Ваша электронная почта]
- Контактная информация разработчика: [Ваша электронная почта]
д. Нажмите «Сохранить и продолжить»
е. На странице «Области» нажмите «Добавить или удалить области»
ф. Найдите и выберите область действия «https://mail.google.com/»
г. Нажмите «Обновить», а затем «Сохранить и продолжить».
час На странице «Тестовые пользователи» нажмите «Добавить пользователей»
я. Добавьте свой адрес Gmail и нажмите «Сохранить и продолжить»
Дж. Просмотрите сводку и нажмите «Вернуться на панель управления»


Шаг 4. Создайте учетные данные OAuth2:
а. Перейдите в раздел «API и службы» > «Учетные данные»
б. Нажмите «Создать учетные данные» > «Идентификатор клиента OAuth»
в. Выберите «Веб-приложение» в качестве типа приложения
д. Имя: [Название вашего приложения]
е. Авторизованные источники JavaScript: добавьте домен вашего сервера (например, http://localhost:3000 для локальной разработки)
Build a Professional Email Service: Gmail OAuth Express   Webhooks
ф. Разрешенные URI перенаправления:
- Добавить: https://developers.google.com/oauthplayground
– Добавьте URL обратного вызова вашего сервера, если он у вас есть (например, http://localhost:3000/auth/google/callback)
г. Нажмите «Создать»
час Во всплывающем окне отобразятся ваш идентификатор клиента и секрет клиента. Сохраните их в надежном месте.


Шаг 5. Получите новый токен обновления:
а. Перейдите на https://developers.google.com/oauthplayground/

Build a Professional Email Service: Gmail OAuth Express   Webhooks

б. Нажмите на значок шестеренки («Настройки лайка») в правом верхнем углу
в. Установите флажок «Использовать собственные учетные данные OAuth»
д. Введите новый идентификатор клиента и секрет клиента
е. Закройте настройки
ф. На левой боковой панели найдите «Gmail API v1»
г. Выберите https://mail.google.com/
час Нажмите «Авторизовать API»
я. Выберите свою учетную запись Google и предоставьте запрошенные разрешения
Дж. На следующем экране нажмите «Обменять код авторизации на токены»
к. Скопируйте «Обновить токен» из ответа

Если у вас возникнут какие-либо проблемы во время этого процесса или при тестировании функциональности электронной почты, укажите в комментариях конкретные сообщения об ошибках или поведение, которое вы видите.


Объяснение кода

Давайте разберем реализацию шаг за шагом:

1. Первоначальная настройка и зависимости

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 для управления переменными среды.

2. Конфигурация OAuth2

const oAuth2Client = new google.auth.OAuth2(
  CLIENT_ID,
  CLIENT_SECRET,
  REDIRECT_URI
);
oAuth2Client.setCredentials({ refresh_token: REFRESH_TOKEN });

Мы создаем клиент OAuth2, используя библиотеку аутентификации Google. Это обеспечивает обновление токена и аутентификацию с помощью API Gmail.

3. Функция отправки электронной почты

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;
  }
}

Эта функция:

  • Извлекает данные из полезных данных вебхука, вы можете изменять полезные данные в соответствии с потребностями
  • Получает новый токен доступа
  • Создает транспорт с аутентификацией OAuth2
  • Отправляет электронное письмо с персонализированным содержанием

4. Конечная точка вебхука

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");
  }
});

Конечная точка нашего вебхука:

  • Получает POST-запросы
  • Обрабатывает данные вебхука
  • Отправляет электронные письма
  • Возвращает соответствующие ответы

Тестирование

Проверьте свой вебхук с помощью Curl или Postman:

curl -X POST http://localhost:4000/webhook \
-H "Content-Type: application/json" \
-d '{
  "receiver_email": "[email protected]",
}'

Поиск неисправностей

Распространенные проблемы и решения:

  1. Ошибки аутентификации: проверьте свои учетные данные OAuth2
  2. Срок действия токена: убедитесь, что токен обновления действителен
  3. Отсутствуют данные: проверьте полезную нагрузку вебхука

Заключение

Теперь у вас есть безопасная система уведомлений по электронной почте с OAuth2 аутентификацией! Эта реализация обеспечивает прочную основу для создания более сложных систем уведомлений, сохраняя при этом безопасность и надежность.

Надеюсь, этот пост будет полезен вам при настройке службы электронной почты.

Удачного программирования! ?

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/yashrajxdev/build-a-professional-email-service-gmail-oauth2-express-webhooks-2gp8?1 Если есть какие-либо нарушения, пожалуйста, свяжитесь с [email protected] удалить его
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3