Поскольку API Gmail появился несколько лет назад, мы можем выполнять операции, которые обычно выполняются в пользовательском интерфейсе Gmail, такие как чтение, запись и отправка сообщений. Он также позволяет вам управлять метками, потоками, искать и извлекать определенные сообщения, используя любой язык программирования.

В этой статье показано, как подключить и использовать API Gmail в Node JS с помощью Typescript и настроить конечные точки так, чтобы они были похожи на наш собственный API.

Получение учетных данных Google Project

Для начала вам понадобится токен для подключения к нужной учетной записи gmail через API gmail. Итак, вам понадобятся учетные данные Google Project для запроса токенов через ваше приложение Node JS.

Перейдите в консоль Google Cloud Platform https://console.cloud.google.com/ и создайте новый проект. Например. Мое приложение Gmail.

В консоли Google перейдите в раздел API & Services, затем в раздел Учетные данные и нажмите кнопку «Создать учетные данные», наконец, выберите «Идентификатор клиента OAuth». выбор.

Вы увидите форму «Создать идентификатор клиента OAuth». Затем в поле «Тип приложения» выберите «Веб-приложение» и любое имя, например «Gmail Auth».

В разделе «Авторизованные источники JavaScript» вы можете поместить URI вашего рабочего URL-адреса, где размещен ваш проект Node JS, но, поскольку этот проект разработан в среде локального хоста, поэтому я использую значение локального хоста (в любом случае вы можете изменить эти значения в любое время ). Для раздела «Авторизованные URI перенаправления» применяется та же логика, но с определенным URL-адресом, на который мы будем перенаправлены после запроса нового токена.

Путь http://localhost:3000/oauth2Callback будет определен далее в приложении Node JS.

Наконец, нажмите кнопку «Создать», и вы увидите сгенерированный идентификатор и секретный ключ, эти значения будут использоваться для запроса новых токенов, вместо того, чтобы копировать эти значения, закройте окно и загрузите файл учетных данных для созданного вами клиента OAuth.

Настройка Node и среды Typescript

Идея этой статьи заключается в использовании Typescript для нашего проекта Node и Express в качестве основы для запуска нашего сервера. Итак, для создания нового проекта с нуля выполните команду «npm init» в нужном корне папки, затем выполните приведенные ниже команды для установки основных зависимостей разработчика:

npm install typescript express @types/express -D
npm install fs-extra

Чтобы настроить основную конфигурацию библиотеки Typescript, создайте файл tsconfig.json и поместите содержимое ниже:

{
  "compilerOptions": {
    "module": "commonjs",
    "noImplicitReturns": true,
    "noImplicitAny": false,
    "strict": true,
    "strictNullChecks": false,
    "strictFunctionTypes": false,
    "noImplicitThis": false,
    "alwaysStrict": false,
    "outDir": "dist",
    "sourceMap": true,
    "noUnusedLocals": false,
    "target": "es2017",
    "resolveJsonModule": true
  },
  "compileOnSave": true,
  "include": [
    "src/**/*"
  ]
}

Затем откройте файл package.json и в свойстве «scripts» добавьте следующие значения:

"scripts": { 
   "prod": "tsc",
   "dev": "tsc && node ./dist/index.js"
}

Это будут скрипты для выполнения нашего проекта Node-Typescript.

Также в том же файле измените значение свойства «main» следующим образом:

"main": "dist/index.js"

В корневом каталоге создайте файл index.ts внутри папки с именем «src», поэтому окончательная структура каталога вашего проекта должна выглядеть следующим образом:

|-- package.json
|-- tsconfig.json
|-- src
    |-- index.ts

Файл index.ts — это основной файл, с которого запускается экспресс-сервер. В этот файл поместите содержимое:

import * as express from "express"
const app = express()
// main routes
app.get('/', (req, res) => {
    res.send("Hello World")
})
// start the server
const PORT = 3000
app.listen(PORT, () => {
    console.log(`App listening on port ${PORT}`)
})
module.exports = app

Наконец, в консоли выполните команду npm run dev, чтобы запустить приложение, и перейдите в браузере по адресу: http://localhost:3000/

Вы сможете увидеть текст «Hello World», и это будет означать, что базовый Node-Typescript работает нормально.

Исходный код проекта

Теперь, когда у нас есть базовый проект, пришло время подключиться к Gmail API, для начала установим официальную библиотеку googleapis:

npm install googleapis

Поместите файл credentials.json, загруженный с первого шага, в папку «src», он будет использоваться для создания клиентов OAuth с библиотекой googleapis. Затем создайте файлы в папке /src, следуя приведенной ниже структуре:

|-- functions
    |-- gmail-api.ts
    |-- gmail-auth.ts
|-- middleware
    |-- auth-middleware.ts
|-- routes
    |-- api-routes.ts
    |-- auth-routes.ts

Поскольку мы собираемся делать HTTP-запросы, рекомендуется установить библиотеку «cors», а также несколько полезных библиотек для обработки сообщений Gmail.

npm install cors nodemailer gmail-api-parse-message
npm install @types/nodemailer -D

Теперь мы готовы кодировать приложение. В файле index.ts измените содержимое следующим образом:

Маршруты аутентификации

Чтобы подключиться к Gmail API, это будет выполняться двумя маршрутами, один из которых будет запрашивать авторизацию пользователя или аутентифицировать пользователя, если токен уже существует, а другой — действовать как обратный вызов после авторизации приложения и получения нового токена. . Затем в файле auth-routes.ts поместите код:

Каждый маршрут вызывает другие методы из файла gmail-auth.ts, эти методы создают клиент OAuth через библиотеку Google, поэтому содержимое этого файла выглядит следующим образом:

Теперь, когда маршруты авторизации построены, вы можете попробовать перейти к http://localhost:3000/gmailAuth, вам будет предложено войти в систему с вашей учетной записью gmail и авторизовать приложение, после чего вы будете перенаправлены на маршрут http://localhost:3000/oauth2Callback, и новый токен будет создан и сохранен автоматически.

Маршруты API Gmail

Пришло время построить маршрут, который позволит нам подключаться к нашим электронным письмам через API Gmail. Вы заметите, что в индексном файле определен путь /api, но над ним есть промежуточное ПО, которое не позволит вам получить доступ к этому пути, если токен не существует. Затем в файл auth-middleware.ts поместите содержимое:

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

Теперь пришло время определить маршруты API, в файл api-routes.ts вставьте содержимое ниже:

Вы увидите 5 маршрутов для нашего API, смотрите назначение каждого из них в комментариях к коду. Маршруты вызывают другие методы из файла gmail-api.ts, который содержит все методы для взаимодействия с Gmail API, код этого файла должен быть:

Вы также можете увидеть комментарии к коду, чтобы увидеть цель и принятые аргументы для каждого метода.

Теперь, когда наш пользовательский API создан, пришло время попробовать его. Для получения сообщений перейдите по адресу: http://localhost:3000/api/getMessages в вашем браузере, и вы сможете увидеть ответ на первые 100 сообщений из вашего почтового ящика, наверняка этот аргумент длины можно изменить в запрос. Если вы хотите увидеть ответ в необычном виде, вы можете использовать другие инструменты для выполнения http-запросов, такие как Почтальон.

Чтобы использовать конечные точки /api/getMessage , /api/getAttachment и /api/getThread , вам нужно знать messageId и передать его в качестве аргумента в своем HTTP-запросе GET. Вы можете получить эти данные из приведенного выше запроса.

Чтобы протестировать конечную точку /api/sendMessage, требуется метод запроса POST с некоторыми обязательными параметрами:

{
  to: the receiver email(required)
  subject: subject of the mail(not required)
  text: text message of the mail(not required)
  attachments: attachment of the mail(not required)
}

На самом деле для отправки сообщения требуется только параметр «Кому», но рекомендуется также передавать параметры «Тема» и «Текст».

Я использую Postman для проверки конечной точки «sendMessage», если вы используете тот же инструмент, вы увидите что-то вроде следующего:

Отличная работа! вы создали собственный API для подключения к вашей учетной записи gmail.

На данный момент у вас есть хороший начальный код для создания полного API электронной почты с более потрясающими функциями. Я рекомендую вам перейти к Gmail API, чтобы получить больше.

Я также создал репозиторий Github для этого проекта: