我在使用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获取的电子邮件解码最好的方法是什么?我是否应该尝试将电子邮件放入具有匹配编码内容的charset
和type
属性的<script>
中?我记得charset
只能与src
属性一起使用,而这里没有src
属性。有任何建议吗?