我需要能够在任何电子邮件正文中收集多个附件。我的测试案例是基于多部分/混合格式的电子邮件。我能够正确地获得单个附件的文件名。当在回调中包含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方法。