gpt4 book ai didi

javascript - Gmail API 在 Javascript 中解码邮件

转载 作者:数据小太阳 更新时间:2023-10-29 04:00:59 27 4
gpt4 key购买 nike

我在解码使用 Gmail API 收到的电子邮件的消息正文时遇到严重问题。我想抓取消息内容并将内容放在一个div中。我使用的是 base64 解码器,我知道它不会解码以不同方式编码的电子邮件,但我不确定如何检查电子邮件以决定使用哪个解码器——声称它们是 utf-8 编码的电子邮件已被成功解码base64 解码器,但不是 utf-8 解码器。

几天来我一直在研究电子邮件解码,我发现我有点不适应这里。我之前没有做过太多围绕电子邮件编码的工作。这是我用来获取电子邮件的代码:

gapi.client.load('gmail', 'v1', function() {
var request = gapi.client.gmail.users.messages.list({
labelIds: ['INBOX']
});
request.execute(function(resp) {
document.getElementById('email-announcement').innerHTML = '<i>Hello! I am reading your <b>inbox</b> emails.</i><br><br>------<br>';
var content = document.getElementById("message-list");
if (resp.messages == null) {
content.innerHTML = "<b>Your inbox is empty.</b>";
} else {
var encodings = 0;
content.innerHTML = "";
angular.forEach(resp.messages, function(message) {
var email = gapi.client.gmail.users.messages.get({
'id': message.id
});
email.execute(function(stuff) {
if (stuff.payload == null) {
console.log("Payload null: " + message.id);
}
var header = "";
var sender = "";
angular.forEach(stuff.payload.headers, function(item) {
if (item.name == "Subject") {
header = item.value;
}
if (item.name == "From") {
sender = item.value;
}
})
try {
var contents = "";
if (stuff.payload.parts == null) {
contents = base64.decode(stuff.payload.body.data);
} else {
contents = base64.decode(stuff.payload.parts[0].body.data);
}
content.innerHTML += '<b>Subject: ' + header + '</b><br>';
content.innerHTML += '<b>From: ' + sender + '</b><br>';
content.innerHTML += contents + "<br><br>";
} catch (err) {
console.log("Encoding error: " + encodings++);
}
})
})
}
});
});

我正在执行一些检查和调试,所以还有剩余的 console.log的和其他一些仅用于测试的东西。不过,您可以在这里看到我正在尝试做的事情。

解码我从 Gmail API 中提取的电子邮件的最佳方法是什么?我应该尝试将电子邮件放入 <script> 吗?与charsettype匹配邮件编码内容的属性?我相信我记得字符集只适用于 src属性,我不会在这里。有什么建议吗?

最佳答案

对于我正在编写的原型(prototype)应用程序,以下代码适用于我:

var base64 = require('js-base64').Base64;
// js-base64 is working fine for me.

var bodyData = message.payload.body.data;
// Simplified code: you'd need to check for multipart.

base64.decode(bodyData.replace(/-/g, '+').replace(/_/g, '/'));
// If you're going to use a different library other than js-base64,
// you may need to replace some characters before passing it to the decoder.

注意:这些点没有明确记录,可能是错误的:

  1. users.messages: get API默认情况下返回“解析的正文内容”。此数据似乎总是以 UTF-8 和 Base64 编码,无论 Content-TypeContent-Transfer-Encoding header 如何。

    例如,我的代码可以毫无问题地解析带有这些 header 的电子邮件:Content-Type: text/plain; charset=ISO-2022-JP, Content-Transfer-Encoding: 7bit.

  2. Base64编码映射表varies among various implementations . Gmail API 使用 -_ 作为表格的最后两个字符,由 RFC 4648 定义的“URL 和文件名安全字母表”1

    检查您的 Base64 库是否使用了不同的映射表。如果是这样,在将正文传递给解码器之前,将这些字符替换为您的库接受的字符。


1 文档中有一条支持行:the "raw" format返回“正文内容作为 base64url 编码的字符串”。 (谢谢埃里克!)

关于javascript - Gmail API 在 Javascript 中解码邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24811008/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com