我也想获取邮件 Gmail API 附带的附件

Posted

技术标签:

【中文标题】我也想获取邮件 Gmail API 附带的附件【英文标题】:I want to get attachments as well that comes with the message Gmail API 【发布时间】:2020-10-12 20:06:06 【问题描述】:

好的,因此使用此代码,我可以获取来自电子邮件的实际邮件内容,但我想要的是我也想获取消息和附件。可以做些什么来列出附件并稍后提供下载附件 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 "";
  ;

点击消息时的 Gmail API。

 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);
    

【问题讨论】:

强烈建议你不要尝试自己做,使用为你包装了api的库 请在脚本中包含您如何使用 gmail-api 来获取邮件正文。 我已经用 Gmail api 更新了这个问题。 【参考方案1】:

解决方案

您正在使用Users.messages: get 端点。这可以检索邮件正文,但要检索附件,您必须使用Users.messages.attachments: get。 Here你可以找到文档的链接。

建议的代码编辑:

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);

参考

Users.messages.attachments

【讨论】:

有了这个我什至无法加载消息。 github.com/KhalidLam/CubeMail 这是存储库,请导航到 src/app.js 以获取建议的更改。 这怎么行不通?加载消息的代码与您发布的代码相同。

以上是关于我也想获取邮件 Gmail API 附带的附件的主要内容,如果未能解决你的问题,请参考以下文章

Gmail API - 从需要的新邮件中下载附件 SCOPES - JAVA

使用 Gmail 的 .NET api 阅读大尺寸电子邮件

Javamail:无法从我的大学电子邮件服务中获取附件

Gmail-api 附带电子邮件时如何收到通知

无需下载即可获取 Gmail 附件文件名

如何让用户浏览器直接从 GMAIL 下载 gmail 附件?