我正在使用电子邮件平台(使用Objective-C语言),并希望使用GTMHTTPFetcher和GTMOAuth2Authentication框架获取一些邮件 . 我正在使用gmail API来获取userinfo并获得适当的响应 .
我想为用户's inbox with category; I' m提取电子邮件,以便使用SYSTEM级别标签,例如 CATEGORY_SOCIAL 用于社交, CATEGORY_PERSONAL 用于个人/主要等 .
对于此功能,我正在使用以下GET API:https://www.googleapis.com/gmail/v1/users/userId/messages API和适当的参数 . 我'm using google'试试这个选项 . https://developers.google.com/gmail/api/v1/reference/users/messages/list#try-it
问题:我能够获得所有的messageID / threadID,但无法在google开发者控制台中获得labelID . 我也从Objective-C代码尝试了这个GET方法,但是没有得到labelID .
我已经附上了Objective-C代码的代码片段,你能帮帮我解决这个问题吗?
NSString *newAPIStr = @"";
newAPIStr = [NSString stringWithFormat:@"https://www.googleapis.com/gmail/v1/users/%@/messages?fields=messages(id,labelIds,threadId),nextPageToken&maxResults=%d",emailStr,maxResult];
NSURL *url = [NSURL URLWithString:newAPIStr];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPMethod:@"GET"];
GTMOAuth2Authentication *currentAuth = [GTMOAuth2ViewControllerTouch authForGoogleFromKeychainForName:kKeychainItemName clientID:kMyClientID clientSecret:kMyClientSecret];
GTMHTTPFetcher* myFetcher = [GTMHTTPFetcher fetcherWithRequest:request];
[myFetcher setAuthorizer:currentAuth];
[myFetcher beginFetchWithCompletionHandler:^(NSData *retrievedData, NSError *error) {
if (error != nil) {
// status code or network error
} else {
// succeeded
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:retrievedData options:kNilOptions error:&error];
NSArray* messageArray =[json objectForKey:@"messages"];
NSString *nextPageToken = [json objectForKey:@"nextPageToken"];
for (NSDictionary *dictionary in messageArray) {
[[EmailService instance].primaryMessages addObject:[dictionary objectForKey:@"id"]];
}
NSMutableArray *pArray = [[EmailService instance] primaryMessages];
[[NSUserDefaults standardUserDefaults] setObject:pArray forKey: ALL_FUNNL];
[[NSUserDefaults standardUserDefaults] setObject:nextPageToken forKey:@"PRIMARY_PAGE_TOKEN"];
[[NSUserDefaults standardUserDefaults] synchronize];
if([EmailService instance].primaryMessages.count < 5000)
[self getPrimaryMessages:emailStr nextPageToken:nextPageToken numberOfMaxResult:100];
else
NSLog(@"----- Primary messages count > %d",pArray.count);
}
}];}
获得如下输出:
{ "messages": [ { "id": "146da54fe3dc089e", "threadId": "146da54fe3dc089e" }, { "id": "146da41d9486982f", "threadId": "146da41d9486982f" }, ... }
3 回答
message.list()只返回消息的id,这是非常标准的REST行为,可以使响应保持小而快 . 如果您还需要获取有关消息(例如标签)的更多信息,则需要使用诸如message.get(id = $ THAT_ID,format = MINIMAL)之类的内容进行跟进,您可以使用批处理来调用许多消息消息并行 .
得到答复后
您可以使用以下方法使用id从每封邮件中获取 Label IDs ,
Reference : Users.messages: get
我相信你应该以相反的方式做到这一点 . 获取标签列表,并为每个标签获取消息 .
INBOX本身就是一个标签,可以让您收到主电子邮件(“主要”标签中的电子邮件)
在此处获取标签列表:https://developers.google.com/gmail/api/v1/reference/users/labels/list
获取消息时提供labelId(s) .
CATEGORY_UPDATES,INBOX,CATEGORY_PROMOTIONS本身也是ID和名称 .
我希望这有助于满足您的要求 .