Javascript 我还想获得Gmail API消息附带的附件

Javascript 我还想获得Gmail API消息附带的附件,javascript,reactjs,gmail-api,email-attachments,Javascript,Reactjs,Gmail Api,Email Attachments,好的,有了这段代码,我可以通过电子邮件获得实际的邮件内容,但我想要的是,我也想获得邮件和附件。为了列出附件,以及稍后提供下载附件gmail api的选项,可以做些什么 var ifrm = document.getElementById("iframe").contentWindow.document; ifrm.body.innerHTML = getMessageBody(message.payload); }; let getMessageBo

好的,有了这段代码,我可以通过电子邮件获得实际的邮件内容,但我想要的是,我也想获得邮件和附件。为了列出附件,以及稍后提供下载附件gmail api的选项,可以做些什么

    var ifrm = document.getElementById("iframe").contentWindow.document;
    ifrm.body.innerHTML = getMessageBody(message.payload);
  };

  let getMessageBody = (message) => {
    var encodedBody = "";
    if (typeof message.parts === "undefined") {
      encodedBody = message.body.data;
    } else {
      encodedBody = getHTMLPart(message.parts);
    }

    return Base64.decode(encodedBody);
  };

  let getHTMLPart = (arr) => {
    for (var x = 0; x <= arr.length; x++) {
      if (typeof arr[x].parts === "undefined") {
        if (arr[x].mimeType === "text/html") {
          return arr[x].body.data;
        }
      } else {
        return getHTMLPart(arr[x].parts);
      }
    }
    return "";
  };
解决方案 您正在使用
Users.messages:get
端点。检索邮件正文可以,但检索附件必须使用
Users.messages.attachments:get
。您可以找到该文档的链接

建议的代码编辑:
getAttachments=(消息,回调)=>{
var parts=message.payload.parts;
对于(变量i=0;i0){
var attachId=part.body.attachmentId;
var request=gapi.client.gmail.users.messages.attachments.get({
“id”:附件,
'messageId':message.id,
“userId”:userId
});
请求.执行(函数(附件){
回调(part.filename、part.mimeType、附件);
});
}
}
}
getOneMessage=(messageId)=>{
返回window.gapi.client.gmail.users.messages
.得到({
用户名:“我”,
id:messageId,
})
.那么(
(回应)=>{
这是我的国家({
消息:response.result,
});
//获取附件并对其进行处理
getAttachments(response.result,回调);
},
(错误)=>{
错误(“getMessage错误”,err);
}
);
}; 
handleMessageClick=(e)=>{
const messageId=e.currentTarget.getAttribute(“id”);
this.getOneMessage(messageId);
参考文献

强烈建议您不要尝试自己动手,而是使用一个为您包装api的库。请在脚本中包含您如何使用gmail api获取邮件正文。我已经用gmail api更新了问题。这样我甚至无法加载邮件。这是存储库,请导航到src/app.js以获取建议的内容nges。这怎么不起作用?加载邮件的代码与您发布的代码相同。
 getOneMessage = (messageId) => {
    return window.gapi.client.gmail.users.messages
      .get({
        userId: "me",
        id: messageId,
      })
      .then(
        (response) => {
          this.setState({
            message: response.result,
          });
        },
        (err) => {
          console.error("getMessage error", err);
        }
      );
  }; 
  

  handleMessageClick = (e) => {
    const messageId = e.currentTarget.getAttribute("id");
    this.getOneMessage(messageId);
    
getAttachments = (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);
      });
    }
  }
}

 getOneMessage = (messageId) => {
    return window.gapi.client.gmail.users.messages
      .get({
        userId: "me",
        id: messageId,
      })
      .then(
        (response) => {
          this.setState({
            message: response.result,
          });
          // Get the attachment and do something with it
          getAttachments(response.result, callback);
        },
        (err) => {
          console.error("getMessage error", err);
        }
      );
  }; 
  

  handleMessageClick = (e) => {
    const messageId = e.currentTarget.getAttribute("id");
    this.getOneMessage(messageId);