在下面的代码中,我正在登录,授权应用程序,并通过GMail API获取控制台输出。我相信我正在获取线程和线程ID,但我没有在控制台中看到这些消息。
我没有得到任何错误,我正在获得输出,只是看起来像没有值的键。
以下是控制台输出的内容:
以下是代码:
var CLIENT_ID = 'YOUR_CLIENT_ID';
var SCOPES = ['https://www.googleapis.com/auth/gmail.readonly'];
var USER = 'me';
/**
* Called when the client library is loaded to start the auth flow.
*/
function handleClientLoad() {
window.setTimeout(checkAuth, 1);
}
/**
* Check if the current user has authorized the application.
*/
function checkAuth() {
gapi.auth.authorize(
{'client_id': CLIENT_ID, 'scope': SCOPES, 'immediate': true},
handleAuthResult);
}
/**
* Called when authorization server replies.
*
* @param {Object} authResult Authorization result.
*/
function handleAuthResult(authResult) {
var authButton = document.getElementById('authorizeButton');
var outputNotice = document.getElementById('notice');
authButton.style.display = 'none';
outputNotice.style.display = 'block';
if (authResult && !authResult.error) {
// Access token has been successfully retrieved, requests can be sent to the API.
gapi.client.load('gmail', 'v1', function() {
listThreads(USER, function(resp) {
var threads = resp.threads;
for (var i = 0; i < threads.length; i++) {
var thread = threads[i];
console.log(thread);
console.log(thread['id']);
}
});
});
} else {
// No access token could be retrieved, show the button to start the authorization flow.
authButton.style.display = 'block';
outputNotice.style.display = 'none';
authButton.onclick = function() {
gapi.auth.authorize(
{'client_id': CLIENT_ID, 'scope': SCOPES, 'immediate': false},
handleAuthResult);
};
}
}
/**
* Get a page of Threads.
*
* @param {String} userId User's email address. The special value 'me'
* can be used to indicate the authenticated user.
* @param {Function} callback Function called when request is complete.
*/
function listThreads(userId, callback) {
var request = gapi.client.gmail.users.threads.list({
'userId': userId
});
request.execute(callback);
}
如何检索邮件的发件人地址,主题和正文?使用js中的GMAIL API
**更新:我目前正在使用的内容:**
listThreads('me', function(dataResult){
$.each(dataResult, function(i, item){
getThread('me', item.id, function(dataMessage){
console.log(dataMessage);
var temp = dataMessage.messages[0].payload.headers;
$.each(temp, function(j, dataItem){
if(dataItem.name == 'From'){
console.log(dataItem.value);
}
});
});
});
});
当我记录dataMessage时,我收到400错误,'id required'。 当我记录dataItem.value时,我得到一个dataMessage.messages是未定义的,并且索引不能为0.
我非常感谢帮助我们开展这项工作!
答案 0 :(得分:1)
Javascript中的GMail api没有明确的方法来访问特定的电子邮件部分 - 来自/等等。 Java中的GMail api具有此功能。 Javascript中的Gmail API仍处于测试阶段。 api list
你仍然想要这样做:这是概述:
而不是获取线程列表获取消息列表: message list
从上次调用中检索的json解析消息id,使用以下命令: message get
以URL编码的base64格式获取原始邮件。 解码和解析。 safe encoding encoding
困难......你打赌......:)
答案 1 :(得分:1)
以下是我通过邮件从电子邮件ID 获取所做的工作
在调用listThread()
方法之后,我调用了getThread()
方法从该线程中获取来自电子邮件ID,如下所示。
listThreads("me", "", function (dataResult) {
$.each(dataResult, function (i, item) {
getThread("me", item.id, function (dataMessage) {
var temp = dataMessage.messages[0].payload.headers;
$.each(temp, function (j, dataItem) {
if (dataItem.name == "From") {
Console.log(dataItem.value);
}
});
});
});
});
同样,您可以从邮件中获取其他详细信息。
答案 2 :(得分:1)
如上面的Amit所述,您可以使用messages.list()来获取消息ID列表。有了这些,你可以简单地调用messages.get(),然后以解析的形式返回一个电子邮件,你可以通过message.payload.headers访问标题。您不需要获取base64编码的'raw'消息。