Я много боролся с этой темой. Наконец, после большого количества поисков и документирования, я наконец пишу эту статью. Я надеюсь, что это поможет всем. В этой статье код будет записан в Nodejs. Это приложение будет включать 2 части, первое — создание и настройка проекта на консоли Google, а следующая часть кодирования.
1) Создание проекта на консоли Google
Open https://console.developers.google.com/ Веб -сайт, и вам нужно создать проект. В верхнем левом углу будет список ваших предыдущих проектов или опции Выберите проект Анкет Модал появится. Выберите в опции Новый проект Анкет
- Выберите -> Новый проект Введите название проекта и создайте проект
2) Включить Gmail API
Убедитесь, что вы выбрали этот проект, затем в поле поиска Gmail API. Включить Gmail API.
3) Настройка проекта
Вам нужны учетные данные, но перед созданием учетных данных вам необходимы для настройки учетных данных. С левой стороны вы найдете экран согласия OAuth. Нажмите здесь.
- Тип пользователя -> внешний
- Введите информацию о приложении, т.е. имя приложения, поддержка электронной почты, контактная информация о разработчике.
- Страница применения сохранить и продолжить
Вкладка Test User: Нажмите «Добавить пользователя», и вы можете добавить до 100 электронных писем. Добавьте электронное письмо для тестирования. Сохранить и продолжить.
Наконец, после настройки нажмите на учетные данные.
4) Создать учетные данные
После посадки на учетные данные, наверху щелкните Создать учетные данные Анкет Нажмите на идентификатор клиента OAuth. Выберите тип приложения. Поскольку мы используем Nodejs, это веб -приложение. Добавить URI как http://localhost: 3000 Анкет Создайте, и вы получите свои учетные данные.
Теперь наступает вторая часть, часть кодирования
5) Настройка кода:
Перейти на эту страницу, Узел JS QuickStart Анкет
Скопируйте пример кода, а затем копируйте вставку в файл с именем index.js.
В папке, где вы создали этот файл, терминал добавил команду
npm init
и инициализируетpackage.json
Вам нужно установить некоторые зависимости с командой
npm i googleapis cheerio mailparser js-base64 open
Зайдите в консоль разработчиков Google в своем проекте. Перейдите к детали. В OAuth 2.0 идентификаторах клиентов вы найдете небольшой значок загрузки, загрузите свой файл учетных данных и добавите в свою папку, где вы создали этот проект. Назовите этот файл как
Detrentients.json
Запустите свой код в своем терминале. Когда вы бежите в первый раз, вы получите что -то подобное
Authorize this app by visiting this url: https://accounts.google.com/o/oauth2/v2/auth?access_type=offline&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fgmail.readonly&response_type=code&client_id=479559853488-050lms0ffusprdhh938s954q0s36kg4i.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob Enter the code from that page here:
Нажмите на этот URL и введите код. Теперь, чтобы иметь возможность управлять метками сообщений, вам необходимо изменить начальную область с gmail.readonly к gmail.modify .
const SCOPES = ['https://www.googleapis.com/auth/gmail.modify'];
Удалить token.json из вашего рабочего каталога.
Одна ошибка, которую некоторые из вас могут получить. Справочный код имеет Указание Но это должно быть Detrentients.Web Анкет Когда вы проверяете файл, Detrentials.json Вы найдете все внутри Интернет объект. Итак, если вы получите эту ошибку, просто проверьте свою creddentials.json файл один раз и замените Установлен соответственно.
function authorize(credentials, callback) { const {client_secret, client_id, redirect_uris} = credentials.installed; ... }
- Если вы столкнетесь с какой -либо другой проблемой, касающейся проверки приложений, перейдите к Процесс проверки и следуй за ними.
6) Окончательный вывод:
Затем перейдите к ListLabels Функция и добавьте идентификатор метки в журнал консоли.
functionlistLabels(auth) { ... labels.forEach((label) => { console.log(`- ${label.name} : ${label.id}`); }); ...}
Наконец, запустите приложение, используя команду
npm run server
Чтобы снова авторизовать приложение и обновить разрешения на доступ. Вы должны быть в состоянии увидеть список метки, но теперь каждая этикетка с соответствующим идентификатором.
Теперь, чтобы читать почтовое ящик,
function listMessages(auth, query){ query = 'unnatibamania8@gmail.com'; return new Promise((resolve, reject) => { const gmail = google.gmail({version: 'v1', auth}); gmail.users.messages.list( { userId: 'me', q:query, maxResults:5 }, (err, res) => { if (err) { reject(err); return; } if (!res.data.messages) { resolve([]); return; } resolve(res.data); getMail(res.data.messages[0].id, auth); } ); }) }
Здесь функция ListMessages принимает 2 параметры Auth и запрос, вы можете назвать эту функцию
fs.readFile('credentials.json', (err, content) => { if (err) return console.log('Error loading client secret file:', err); // Authorize a client with credentials, then call the Gmail API. authorize(JSON.parse(content), listMessages); });
После ведения консоли res.data.messages , вы получите Threadid и id. Передать идентификатор в GetMail функция
function getMail(msgId, auth){ console.log(msgId) const gmail = google.gmail({version: 'v1', auth}); //This api call will fetch the mailbody. gmail.users.messages.get({ userId:'me', id: msgId , }, (err, res) => { console.log(res.data.labelIds.INBOX) if(!err){ console.log("no error") var body = res.data.payload.parts[0].body.data; var htmlBody = base64.decode(body.replace(/-/g, '+').replace(/_/g, '/')); console.log(htmlBody) var mailparser = new Mailparser(); mailparser.on("end", (err,res) => { console.log("res",res); }) mailparser.on('data', (dat) => { if(dat.type === 'text'){ const $ = cheerio.load(dat.textAsHtml); var links = []; var modLinks = []; $('a').each(function(i) { links[i] = $(this).attr('href'); }); //Regular Expression to filter out an array of urls. var pat = /------[0-9]-[0-9][0-9]/; //A new array modLinks is created which stores the urls. modLinks = links.filter(li => { if(li.match(pat) !== null){ return true; } else{ return false; } }); console.log(modLinks); //This function is called to open all links in the array. } }) mailparser.write(htmlBody); mailparser.end(); } }); }
Окончательный результат
Не читайте все сообщения все вместе, это может сбить приложение. Следовательно, я читал только 1 почту за раз. Вы можете просто поиграть с кодом и найти много других вещей! Я надеюсь, что эта статья поможет.
Оригинал: «https://dev.to/commentme/read-data-from-gmail-using-node-js-1nke»