Gmail API - 使用Javascript解析邮件内容(Base64解码?)

eug*_*832 7 javascript base64 angularjs gmail-api

我正在尝试使用Gmail API获取用户的电子邮件,抓取邮件主题和正文,然后将其显示在网页上.我会用它来做其他事情,但这是我遇到困难的部分.我正在使用Angular.js.

这是我的API调用:

function makeApiCall() {
  gapi.client.load('gmail', 'v1', function() {
    var request = gapi.client.gmail.users.messages.list({
      labelIds: ['INBOX']
    });
    request.execute(function(resp) {
      var content = document.getElementById("message-list");
      angular.forEach(resp, function(message) {
        var email = gapi.client.gmail.users.messages.get({'id': message.id});
        // var raw = email.payload.parts;
        // console.log(raw);
        content.innerHTML += JSON.stringify(email) + "<br>";
      })
    });
  });
}
Run Code Online (Sandbox Code Playgroud)

因此gapi.client.gmail.users.messages.list返回我的消息数组及其ID号.那很有效.

要求gapi.client.gmail.users.messages.get({<specific message ID>})输出这个 - {"B":{"method":"gmail.users.messages.get","rpcParams":{},"transport":{"name":"googleapis"}}}.

不确定是什么,但尝试获取消息payload(email.payload.parts),结果undefined.那么,我该如何获取消息内容?

此外,我会假设如果我可以获取消息内容,那么我将不得不对内容进行Base64解码以获得一些英语.对此有任何建议也会有很大帮助.我发现了这个:https://github.com/kvz/phpjs,但是因为我不知道如何获取消息内容以便我可以尝试解码它们,所以不确定是否有php.js在这方面是有帮助的.

Ful*_*ack 27

关于Base64解码,您可以使用

atob(dataToDecode)
Run Code Online (Sandbox Code Playgroud)

对于Gmail,您还需要替换一些字符:

atob( dataToDecode.replace(/-/g, '+').replace(/_/g, '/') ); 
Run Code Online (Sandbox Code Playgroud)

您可以在JavaScript中使用上述功能(参见参考资料).我自己用它来解码Gmail邮件.无需安装额外的东西.作为一个有趣的切线,如果要将消息编码为Base64,请使用btoa.

现在,为了访问消息有效负载,您可以编写一个函数:

var extractField = function(json, fieldName) {
  return json.payload.headers.filter(function(header) {
    return header.name === fieldName;
  })[0].value;
};
var date = extractField(response, "Date");
var subject = extractField(response, "Subject");
Run Code Online (Sandbox Code Playgroud)

引用我以前的SO问题

var part = message.parts.filter(function(part) {
  return part.mimeType == 'text/html';
});
var html = atob(part.body.data.replace(/-/g, '+').replace(/_/g, '/'));
Run Code Online (Sandbox Code Playgroud)

  • 哦,我的 _gOoOd_ 谢谢你的 GMail 提示。我试图弄清楚为什么我的解码在“原始”消息上出现乱码。 (2认同)

Eri*_*c D 4

根据您的电子邮件的外观(单个文本/纯文本部分?带有文本/html 的多部分?附件等?),您的 email.payload 中可能有也可能没有任何“部分”,相反,您将拥有您想要的内容在“email.payload.body.data”中查找(对于单部分消息)。这一切都假设您正在使用默认格式(“完整”)执行 message.get 。如果您想在 message.raw 字段中获取整个电子邮件并在适合您的语言的电子邮件库中处理它,您可以调用 message.get(format=raw)。

有关详细信息,请查看“Message”的“body”和“parts[]”字段文档:https://developers.google.com/gmail/api/v1/reference/users/messages