【问题标题】:I want to get attachments as well that comes with the message Gmail API我也想获取邮件 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 更新了这个问题。

标签: javascript reactjs gmail-api email-attachments


【解决方案1】:

解决方案

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

建议的代码编辑:

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 以获取建议的更改。
  • 这怎么行不通?加载消息的代码与您发布的代码相同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-26
  • 2016-12-21
  • 2016-05-29
  • 2016-12-16
  • 2012-07-19
  • 2014-09-08
  • 2018-11-11
相关资源
最近更新 更多