0

hello i want use the gmail api, but i get next error

Cannot read property 'parts' of undefined

when i try get attachments from gmail emails, this is my code is from gmail api expamles, i try send

  getAttachments('me',message.id , avCallBack);  AND   getAttachments('me',message , avCallBack);

but this not work, pls helpme, i want download files from my emails with api google javascript

  function displayInbox() {
    var request = gapi.client.gmail.users.messages.list({
      'userId': 'me',
      'labelIds': 'INBOX',
      'maxResults': 15
    });
    request.execute(function(response) {
      $.each(response.messages, function() {
        var messageRequest = gapi.client.gmail.users.messages.get({
          'userId': 'me',
          'id': this.id
        });
        console.log("---"+JSON.stringify(messageRequest));
        messageRequest.execute(appendMessageRow);

      });
    });
  }

   function appendMessageRow(message) {
       getAttachments('me',message.id , avCallBack);

    $('.table-inbox tbody').append(
      '<tr>\
        <td>'+getHeader(message.payload.headers, 'From')+'</td>\
        <td>\
          <a href="#message-modal-' + message.id +
            '" data-toggle="modal" id="message-link-' + message.id+'">' +
            getHeader(message.payload.headers, 'Subject') +
          '</a>\
        </td>\
        <td>'+getHeader(message.payload.headers, 'Date')+'</td>\
      </tr>'
    );

    function getHeader(headers, index) {
    var header = '';
    $.each(headers, function(){
      if(this.name === index){
        header = this.value;
      }
    });
    return header;
      }
  }


  function getAttachments(userId, message, callback) {
    var parts = message.payload.parts;
    for (var i = 0; i < parts.length; i++) {
      var part = parts[i];
      if (part.filename && part.filename.length > 0) {
        var attachId = part.body.attachmentId;
        var request = gapi.client.gmail.users.messages.attachments.get({
          'id': attachId,
          'messageId': message.id,
          'userId': userId
        });
        request.execute(function(attachment) {
          callback(part.filename, part.mimeType, attachment);
        });
      }
    }
  }

  function avCallBack(name, mimetype, filee){
      alert ("->" + name + mimetype + file);
  }
Andress Blend
  • 285
  • 2
  • 4
  • 14

1 Answers1

0

You are passing message.id to getAttachments function. According to Users.messages message.id is a string. In getAttachments you are getting payload from message object which doesn't have it since you passed string. You need to pass Users.messages objects.

Also problem can lie in using $.each. Why not use forEach? Please see example below:

 response.messages.forEach(function(msg) {
    var messageRequest = gapi.client.gmail.users.messages.get({
      'userId': 'me',
      'id': msg.id
    });
    console.log("---"+JSON.stringify(messageRequest));
    messageRequest.execute(appendMessageRow);
 });
Andrzej Smyk
  • 1,684
  • 11
  • 21