Как получать сообщения с помощью NodeJS Gmail API?

Мне нужно создать небольшую программу в NodeJS, которая будет проверять учетную запись пользователя на наличие новых сообщений и уведомлять их по SMS (используя Twilio), если у них есть новая почта. К сожалению, у меня возникли проблемы с работой функции выборки.

Я искал некоторое время, и все фрагменты, которые я мог найти, имеют тот же фрагмент, что и тот, который я публикую ниже:

var gmail = google.gmail('v1');
//console.log("auth is " + util.inspect(auth, false, null));
// Line 77 under this comment
gmail.users.messages.list({userId: 'me', auth: auth}, function(err, response) {
        console.log("this is " + util.inspect(response, false, null) + "with error " + err);
    });

Когда это запускается, происходит сбой с:

/Users/mirtle/Documents/Universishit/smsmirtle/node_modules/googleapis/lib/apirequest.js:180 req = authClient.request(options, callback); ^

TypeError: authClient.request не является функцией в createAPIRequest (/Users/mirtle/Documents/Universishit/smsmirtle/node_modules/googleapis/lib/apirequest.js:180:22) в Object.Gmail.self.users.messages.list ( /Users/mirtle/Documents/Universishit/smsmirtle/node_modules/googleapis/apis/gmail/v1.js:728:16) на CronJob. (/Users/mirtle/Documents/Universishit/smsmirtle/server.js:77:26) в CronJob.fireOnTick (/Users/mirtle/Documents/Universishit/smsmirtle/node_modules/cron/lib/cron.js:392:22) at callbackWrapper [как _onTimeout] (/Users/mirtle/Documents/Universishit/smsmirtle/node_modules/cron/lib/cron.js:435:9) at Timer.listOnTimeout (timers.js:92:15)

Как я уже сказал, все фрагменты, которые я смог найти, в том числе из других вопросов StackOverflow, такие, поэтому я не знаю, что я здесь делаю неправильно.

Токен авторизации действителен. Если вы раскомментируете комментарий над моим комментарием в строке 77, он напечатает его правильно. Он также запускает предоставленный Google пример для печати этикеток, и они печатаются, поэтому токен действителен и авторизован.

Любопытно, если я вызову функцию следующим образом:

gmail.users.messages.list({}, function(err, response){...}

Без параметров не вылетает, но жалуется, что нет userId.

Я также могу вызвать его без первого параметра, но он также жалуется на отсутствие userId.

Я буду признателен за любую помощь, которую вы можете дать.


person Sargento    schedule 24.05.2016    source источник
comment
Вы когда-нибудь выясняли, почему он говорит, что authClient.request не определен?   -  person EthanLWillis    schedule 21.09.2016


Ответы (2)


Вместо того, чтобы напрямую использовать переменную auth, которая содержит access_token и другие данные, вы должны сначала установить ее как учетные данные oauth. Я сталкиваюсь с той же проблемой, что и вы. Что я сделал (см. код ниже)

oauth2Client.setCredentials(auth);
gmail.users.messages.list({userId: 'me', auth: oauth2Client}, function(err, response){

}

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

person sse    schedule 27.01.2017
comment
Вот это серебряная пуля!!! делать это из документов oauth2Client.credentials = token; не работает. - person Eyo Okon Eyo; 12.06.2017

Похоже, вы передаете токен аутентификации, но вам нужно передать клиент аутентификации.

Я говорю о первом параметре функции списка: '{userId: 'me', auth: auth}'

Попробуйте сделать этот клиент авторизации, который вы использовали для получения токена (например, google.auth.JWT).

person Tom    schedule 08.06.2016