Поскольку 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 для этого проекта: