Gmail REST API Users.messages.attachments:不返回文件名



我需要能够在任何电子邮件正文中收集多个附件。我的测试案例是基于多部分/混合格式的电子邮件。我能够正确地获得单个附件的文件名。当在回调中包含console.log('Filename' + part.filename)时,很容易看到这个问题。它将永远是空的。似乎数组-部件总是"卡"在索引的最后,在我的情况下,将给我一个空的部分。

我已经尝试了各种解决方案,包括推送和弹出正确的文件名,但这不起作用,因为附件以随机顺序返回..

我认为这是一个错误,我希望这可以被认为是一个错误,因为我真的需要解决这个问题。

编辑:更多调查后的额外信息:1. 请求。执行(函数(附件). .只跑一次在for..循环结束后,即使有多个附件。但是它也会返回正确的附件多个,按随机顺序。

  • 从request.execute(function()返回的附件对象附件)将永远不会包含一个attachmentId,只有原始数据和大小。

  • 从附件对象返回的大小附件)与var parts =报告的大小不同message.payload.parts;

  • request.execute(函数(附件)将只使用最后的数据从var parts = message.payload.parts;哪个不相关附件。

  • 函数getAttachments(userId, message, callback) {Var parts = message.payload.parts;

    for (var i = 0; i < parts.length; i++) {
    part = parts[i];
    if (part.filename && part.filename.length > 0){
        var attachId = part.body.attachmentId;
        myfilename.push( part.filename )
        var request = gapi.client.gmail.users.messages.attachments.get({
        'id': attachId,
        'messageId': message.id,
        'userId': userId
        }); 
    request.execute(function( attachment) {
    // PROBLEM: part.filename and part.mimeType is empty or wrong.            
    callback( **part.filename**, part.mimeType, attachment );
    });
    }
    }
    

    }

    function callback( name, mime, att ) {
    // PROBLEM: empty name, and wrong mime 
    console.log( 'Filnavn: ' + name );
    if (name == '') {
     name = myfilename.pop();
    }
    

    您需要保存文件上下文,以便在进行回调时,它知道原始文件名和mime类型,如下所示:

    function getAttachments(userId, message, callback) {
      var parts = message.payload.parts;
      var attachments = [];//The attachments cache
      for (var i = 0; i < parts.length; i++) {
        part = parts[i];
        if (part.filename && part.filename.length > 0) {
            var attachId = part.body.attachmentId;
            myfilename.push(part.filename);
            console.log('attachId=' + attachId);
            console.log('MessageID=' + message.id);
            console.log('UserID=' + userId);
            var request = gapi.client.gmail.users.messages.attachments.get({
                'id': attachId,
                'messageId': message.id,
                'userId': userId
            });
            attachments[attachId] = {filename: part.filename, mimeType:part.mimeType};
            request.execute(function (attachment) {
            // PROBLEM: part.filename and part.mimeType is empty or wrong.            
                var file = attachments[attachment.attachmentId];
                callback(file.filename, file.mimeType, attachment);
            });
        }
      }
    }
    

    不确定是否已经解决了这个问题。我也面临着同样的问题。当我看着谷歌ApI Gmail附件操场尽管我有这些字段:attachmentId,data,size。响应只是没有给出attachmentd。我想我们可能不应该使用bathQuery方法。

    相关内容

    • 没有找到相关文章

    最新更新