Email Gmail API用户信息:列表

Email Gmail API用户信息:列表,email,gmail-api,Email,Gmail Api,我在电子邮件平台(Objective-C语言)上工作,希望使用GTMHTTPFetcher和GTMOAuth2Authentication框架获取一些邮件。我使用gmail API获取用户信息并获得适当的响应 我想为用户的收件箱获取分类电子邮件;我正在考虑使用系统级标签,例如CATEGORY\u SOCIAL表示社交,CATEGORY\u PERSONAL表示个人/初级等等 对于这个功能,我使用以下GET-API:API和适当的参数。我正在使用谷歌的试用选项。 问题:我能够获取所有messag

我在电子邮件平台(Objective-C语言)上工作,希望使用GTMHTTPFetcher和GTMOAuth2Authentication框架获取一些邮件。我使用gmail API获取用户信息并获得适当的响应

我想为用户的收件箱获取分类电子邮件;我正在考虑使用系统级标签,例如CATEGORY\u SOCIAL表示社交,CATEGORY\u PERSONAL表示个人/初级等等

对于这个功能,我使用以下GET-API:API和适当的参数。我正在使用谷歌的试用选项。

问题:我能够获取所有messageid/threadid,但无法在googledeveloper控制台中获取labelid。我也尝试过从Objective-C代码中获取方法,但没有得到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);
    }
}];}
NSString*newAPIStr=@”;
newAPIStr=[NSString stringWithFormat:@”https://www.googleapis.com/gmail/v1/users/%@/消息?字段=消息(id、LabelID、threadId)、nextPageToken和maxResults=%d”、emailStr、maxResult];
NSURL*url=[NSURL URLWithString:newAPIStr];
NSMutableURLRequest*请求=[NSMutableUrlRequestRequestWithURL:url];
[请求设置值:@“应用程序/x-www-form-urlencoded”forHTTPHeaderField:@“内容类型”];
[请求设置HttpMethod:@“获取”];
GTMOAuth2Authentication*currentAuth=[GTMOAuth2ViewControllerTouch authForGoogleFromKeychainForName:kKeychainItemName clientID:kMyClientID clientSecret:kMyClientSecret];
GTMHTTPFetcher*myFetcher=[GTMHTTPFetcher fetcherWithRequest:request];
[myFetcher setAuthorizer:currentAuth];
[myFetcher beginFetchWithCompletionHandler:^(NSData*retrievedData,NSError*error){
如果(错误!=nil){
//状态代码或网络错误
}否则{
//成功
NSDictionary*json=[NSJSONSerialization JSONObjectWithData:retrievedData选项:针织错误:&错误];
NSArray*messageArray=[json objectForKey:@“messages”];
NSString*nextPageToken=[json objectForKey:@“nextPageToken”];
for(NSDictionary*messageArray中的dictionary){
[[EmailService实例].primaryMessages addObject:[dictionary objectForKey:@“id”];
}
NSMutableArray*pArray=[[EmailService实例]primaryMessages];
[[NSUserDefaults standardUserDefaults]setObject:pArray forKey:ALL_FUNNL];
[[NSUserDefaults standardUserDefaults]setObject:nextPageToken-forKey:@“主页面令牌”];
[[NSUserDefaults standardUserDefaults]同步];
if([EmailService实例].primaryMessages.count<5000)
[self-getPrimaryMessages:emailStr nextPageToken:nextPageToken numberOfMaxResult:100];
其他的
NSLog(@“-----主消息计数>%d”,pArray.count);
}
}];}
获得如下输出:

{
“信息”:[
{
“id”:“146da54fe3dc089e”,
“线程ID”:“146da54fe3dc089e”
},
{
“id”:“146da41d9486982f”,
“线程ID”:“146da41d9486982f”
},
...

}

message.list()只返回消息的id,这是保持响应小而快的标准REST行为。如果还需要获取消息的更多信息(如标签),则需要使用message.get(id=$THAT\id,format=MINIMAL)之类的内容进行后续操作,您可以使用批处理调用它来并行检索多条消息。

我认为您应该用另一种方法来执行此操作。获取标签列表,并为每个标签获取消息

收件箱本身是一个标签,可以让您获取主要电子邮件(“主要”选项卡中的电子邮件)

在此处获取标签列表:

获取消息时,请提供标签ID

此外,类别更新、收件箱、类别促销本身就是ID和名称


我希望这有助于处理您的需求。

在收到以下回复后:

{
 "messages": [
  {
   "id": "146da54fe3dc089e",
   "threadId": "146da54fe3dc089e"
  },
  {
   "id": "146da41d9486982f",
   "threadId": "146da41d9486982f"
  },
  ...
}
您可以使用以下方法从使用id的每封邮件中获取标签id

https://www.googleapis.com/gmail/v1/users/<userId>/messages/<messageId>
https://www.googleapis.com/gmail/v1/users//messages/

参考:

您从GET调用中得到了什么响应?@kroikie:我已经在问题中添加了响应。您能详细说明一下吗?我仍然认为Google API Explorer能够为用户输入
字段
值是非常令人恼火的。消息:列表,而这些不会在响应中返回nse或甚至不是一个错误,即cetain字段值无效。@Kapé最糟糕的是,在文档页上,它允许您选择其他非id或labelId的字段,如下面的链接所示,但如果您这样做,它将给您一个空的响应。它不会抛出错误或给您任何反馈Gmail API的文档并没有说,尽管这是可行的,但我认为messages.list有一个bug,它没有带来其他字段。在文档本身上,它有一个“field”属性,让您可以选择id和labelid以外的其他字段。