Получать сообщения в папку "Входящие" GMail пользователей

В приведенном ниже коде я вхожу в систему, авторизую приложение и получаю вывод консоли через GMail API. Я считаю, что получаю потоки и идентификаторы потоков, но не вижу сообщений в консоли.

Я не получаю никаких ошибок, и я получаю вывод, который выглядит как ключи без значений.

Вот как выглядит вывод консоли: введите здесь описание изображения

Вот код:

var CLIENT_ID = 'YOUR_CLIENT_ID';
var SCOPES = ['https://www.googleapis.com/auth/gmail.readonly'];
var USER = 'me';

  /**
   * Called when the client library is loaded to start the auth flow.
   */
  function handleClientLoad() {
    window.setTimeout(checkAuth, 1);
  }

  /**
   * Check if the current user has authorized the application.
   */
  function checkAuth() {
    gapi.auth.authorize(
        {'client_id': CLIENT_ID, 'scope': SCOPES, 'immediate': true},
        handleAuthResult);
  }

  /**
   * Called when authorization server replies.
   *
   * @param {Object} authResult Authorization result.
   */
  function handleAuthResult(authResult) {
    var authButton = document.getElementById('authorizeButton');
    var outputNotice = document.getElementById('notice');
    authButton.style.display = 'none';
    outputNotice.style.display = 'block';
    if (authResult && !authResult.error) {
      // Access token has been successfully retrieved, requests can be sent to the API.
      gapi.client.load('gmail', 'v1', function() {
        listThreads(USER, function(resp) {
          var threads = resp.threads;
          for (var i = 0; i < threads.length; i++) {
            var thread = threads[i];
            console.log(thread);
            console.log(thread['id']);
          }
        });
      });
    } else {
      // No access token could be retrieved, show the button to start the authorization flow.
      authButton.style.display = 'block';
      outputNotice.style.display = 'none';
      authButton.onclick = function() {
          gapi.auth.authorize(
              {'client_id': CLIENT_ID, 'scope': SCOPES, 'immediate': false},
              handleAuthResult);
      };
    }
  }


  /**
   * Get a page of Threads.
   *
   * @param  {String} userId User's email address. The special value 'me'
   * can be used to indicate the authenticated user.
   * @param  {Function} callback Function called when request is complete.
   */
  function listThreads(userId, callback) {
    var request = gapi.client.gmail.users.threads.list({
      'userId': userId
    });
    request.execute(callback);
  }

Как получить адрес отправителя, тему и текст сообщения? с API GMAIL в js

** Обновление: с чем я сейчас работаю: **

listThreads('me', function(dataResult){
    $.each(dataResult, function(i, item){
        getThread('me', item.id, function(dataMessage){
            console.log(dataMessage);
            var temp = dataMessage.messages[0].payload.headers;
            $.each(temp, function(j, dataItem){
                if(dataItem.name == 'From'){
                    console.log(dataItem.value);
                }
            });
         });
      });
   });

Когда я регистрирую dataMessage, я получаю ошибку 400, «Требуется идентификатор». Когда я регистрирую dataItem.value, я получаю, что dataMessage.messages не определено и не может иметь индекс 0.

Я был бы очень признателен за помощь в получении этой работы!


person wordSmith    schedule 17.08.2014    source источник


Ответы (3)


API-интерфейс GMail в Javascript не содержит явных методов для доступа к определенной части электронной почты — к/от/и т. д. GMail API в Java имеет эту функцию. Gmail API в Javascript все еще находится в стадии бета-тестирования. список API

Вы все еще хотите это сделать: Вот план:

Вместо получения списка потоков получите список сообщений: список сообщений< /а>

Разберите идентификатор сообщения из json, полученного из предыдущего вызова, используйте его со следующим: получить сообщение

Получить необработанное сообщение в формате base64 с кодировкой URL. Расшифровать и разобрать. безопасное кодирование кодировка

Трудно... Еще бы... :)

person Amit G    schedule 18.08.2014
comment
не могли бы вы показать мне, как получить список потоков? Что я сейчас делаю, я получаю идентификатор в консоли. Но как мне получить сообщения оттуда? Вот живой пример: irfanknow.com/gmail.html - person wordSmith; 18.08.2014

Как сказал Амит выше, вы можете использовать messages.list() для получения списка идентификаторов сообщений. С ними вы можете просто вызвать messages.get(), и это вернет электронное письмо в форме parsed, и вы сможете получить доступ к заголовкам через message.payload.headers. Вам не нужно кодировать «сырое» сообщение base64.

person Eric D    schedule 05.09.2014

Вот что я сделал, чтобы получить идентификатор от электронной почты из сообщения
После вызова метода listThread() я вызвал метод getThread(), чтобы получить идентификатор электронной почты из этого потока, как показано ниже. .

listThreads("me", "", function (dataResult) {
         $.each(dataResult, function (i, item) {
           getThread("me", item.id, function (dataMessage) {
             var temp = dataMessage.messages[0].payload.headers;
             $.each(temp, function (j, dataItem) {
                   if (dataItem.name == "From") {
                       Console.log(dataItem.value);
                    }
             });
        });
    });
});

Точно так же вы можете получить другие данные из сообщения.

Ссылка : формат JSON для сообщения< /а>

person AbdulRahman Ansari    schedule 05.09.2014
comment
Хорошо, это имеет больше смысла. Я запустил его и получил ошибку string is not a function, но затем я удалил второй аргумент из listThreads, и у меня не было ошибок. За исключением того, что я снова ничего не получаю в консоли. Никаких ошибок и результатов. Вот что у меня есть: gist.github.com/theirf/71464ac6e9ead6425074 - person wordSmith; 11.09.2014
comment
@user3743069 user3743069 отлаживайте свой код, используя F12 в Chrome или FireFox, проверьте, получаете ли вы правильный ответ или нет... - person AbdulRahman Ansari; 12.09.2014
comment
@user3743069 user3743069 вы добавили метод getThreads(), если нет, то проверьте gist.github.com/theirf/71464ac6e9ead6425074, я добавил туда метод - person AbdulRahman Ansari; 12.09.2014
comment
Спасибо. Теперь я использую вашу функцию getThread(), но получаю сообщение об ошибке. он говорит, что .messages не определено? и нет индекса 0 для .messages, поскольку он не определен. Вот код: gist.github.com/theirf/71464ac6e9ead6425074 - person wordSmith; 13.09.2014
comment
@user3743069 user3743069 проверьте, получаете ли вы что-нибудь в dataResult или также undefined??? - person AbdulRahman Ansari; 15.09.2014
comment
Я получаю сообщение об ошибке 400 о том, что требуется идентификатор. Я поставил свой код и ошибки в нижней части моего вопроса. Спасибо вам за помощь! - person wordSmith; 16.09.2014