npm модуль для получения почты через Gmail api. Как настроить?



  • Добрый вечер! Кто занимался получением почти через Gmail api, подскажите пожалуйста как получать письма через api на BASe. Перепробовал несколько модулей - запросы с ошибками выходят.



  • А через imap стандартный чем не нравится?



  • Медленный. Теряется 2-5 секунд, а тут каждая секунда важна



  • а посмотреть модул на оф сайте?) https://developers.google.com/gmail/api/quickstart/nodejs?hl=ru



  • @artihorror смотрел

    Там надо закинуть client_secret.json в рабочую директорию

    И где найти этот файл
    // If modifying these scopes, delete your previously saved credentials
    // at ~/.credentials/gmail-nodejs-quickstart.json
    var SCOPES = ['https://www.googleapis.com/auth/gmail.readonly'];
    var TOKEN_DIR = (process.env.HOME || process.env.HOMEPATH ||
    process.env.USERPROFILE) + '/.credentials/';
    var TOKEN_PATH = TOKEN_DIR + 'gmail-nodejs-quickstart.json';



  • я тоже хочу узнать как сказал автор темы каждая секунда важна



  • @GamiD нет кто может объяснить что и как делается?



  • @teamgame у тебя получилось?



  • @GamiD
    Я пытался, но ошибки выходили при запуске. Надо было запустить от администратора BAS чтобы все модули установились корректно.
    Протестирую еще раз сегодня-завтра) пока занят



  • @teamgame said in npm модуль для получения почты через Gmail api. Как настроить?:

    Там надо закинуть client_secret.json в рабочую директорию
    И где найти этот файл
    // If modifying these scopes, delete your previously saved credentials
    // at ~/.credentials/gmail-nodejs-quickstart.json
    var SCOPES = ['https://www.googleapis.com/auth/gmail.readonly'];
    var TOKEN_DIR = (process.env.HOME || process.env.HOMEPATH ||
    process.env.USERPROFILE) + '/.credentials/';
    var TOKEN_PATH = TOKEN_DIR + 'gmail-nodejs-quickstart.json';

    куда ставить все это понял
    но после запуска node quickstart.js выдает ссылку копирую эту ссылку ставлю в браузер пишет ошибка

    404. That’s an error.
    

    не могу с этим разобраться



  • если на чистом ноде - создаешь файл в директории node quickstart.js с этим кодом и через команду запускаешь. Потом в браузере доступ надо открыть



  • @teamgame said in npm модуль для получения почты через Gmail api. Как настроить?:

    открываю все это командная строка мне выдает ссылку пишет открой эту ссылку и напиши в командную строку код который на странице а вот ссылка это не открывается google ошибку выдает



  • @teamgame 0_1519149593696_1.JPG
    вот так пишет



  • так написано же скопировать этот url и получить токен



  • @teamgame ну я же копирую и ставлю в браузер гугл выдает ошибку
    0_1519149885554_1.JPG
    может как то нужно выпрямить ссылку



  • помоему командная строка полностью не дает ссылку какие то части отсутсвуют так как когда пишу в адрес в браузере есть пробелы в некоторых местах



  • Все получилось оказывается были пробелы
    Но что дальше делать не понятно



  • @GamiD дальше тоже пока не изучал



  • @teamgame ты получил доступ? получилось client_secret.json поставить?



  • Нашел время для настройки работы с модулем gmail.

    1. Скачал credentials.json с токенами.
    2. В webstorm все работает идеально, в BAS некуда вставлять токен авторизации) какие идеи по адаптации? Я просто скопировал файл приложения в папку BAS.
    3. Но не работает лог и присваивания переменных. Хотя сообщения отмечает прочитанными.
    const fs = require('fs');
    const readline = require('readline');
    const {google} = require('googleapis');
    // If modifying these scopes, delete token.json.
    const SCOPES = ['https://mail.google.com/'];
    const TOKEN_PATH = 'token.json';
    
    fs.readFile('credentials.json', (err, content) => {
        if (err) return console.log('Error loading client secret file:', err);
        authorize(JSON.parse(content), getRecentEmail);
    });
    
    function authorize(credentials, callback) {
        const {client_secret, client_id, redirect_uris} = credentials.installed;
        const oAuth2Client = new google.auth.OAuth2(
            client_id, client_secret, redirect_uris[0]);
    
        fs.readFile(TOKEN_PATH, (err, token) => {
            if (err) return getNewToken(oAuth2Client, callback);
            oAuth2Client.setCredentials(JSON.parse(token));
            callback(oAuth2Client);
        });
    }
    
    function getNewToken(oAuth2Client, callback) {
        const authUrl = oAuth2Client.generateAuthUrl({
            access_type: 'offline',
            scope: SCOPES,
        });
        console.log('Authorize this app by visiting this url:', authUrl);
        const rl = readline.createInterface({
            input: process.stdin,
            output: process.stdout,
        });
        rl.question('Enter the code from that page here: ', (code) => {
            rl.close();
            oAuth2Client.getToken(code, (err, token) => {
                if (err) return console.error('Error retrieving access token', err);
                oAuth2Client.setCredentials(token);
                // Store the token to disk for later program executions
                fs.writeFile(TOKEN_PATH, JSON.stringify(token), (err) => {
                    if (err) return console.error(err);
                    console.log('Token stored to', TOKEN_PATH);
                });
                callback(oAuth2Client);
            });
        });
    }
    
    
    function getRecentEmail(auth) {
        var gmail = google.gmail('v1');
        gmail.users.messages.list({auth: auth, userId: 'me', maxResults: 3, q: 'is:unread'}, function(err, response) {
            if (err) {
                console.log('The API returned an error: ' + err);
                return;
            }
    
            var message_id = response['data']['messages'][0]['id'];
            gmail.users.messages.get({auth: auth, userId: 'me', 'id': message_id}, function(err, response) {
                if (err) {
                    console.log('The API returned an error: ' + err);
                    return;
                }
                console.log(response['data']);
            });
            gmail.users.messages.modify({
                "auth": auth,
                'userId':'me',
                'id':message_id,
                'resource': {
                    'addLabelIds':[],
                    'removeLabelIds': ['UNREAD']
                }
            }, function(err) {
                if (err) {
                    console.log('Failed to mark email as read! Error: '+err);
                    return;
                }
                console.log('Successfully marked email as read', message_id);
            });
        });
    }
    

Log in to reply
 

  • 2
  • 11
  • 7
  • 2
  • 2
  • 9
  • 1
  • 5