Gmail API返回状态代码400,错误“;“邮件服务未启用”;

Gmail API返回状态代码400,错误“;“邮件服务未启用”;,gmail,gmail-api,Gmail,Gmail Api,我最近开始从gmail API中看到以下错误: { "code" : 400, "errors" : [ { "domain" : "global", "message" : "Mail service not enabled", "reason" : "failedPrecondition" } ], "message" : "Mail service not enabled" } 我测试过的每个gmail api调用都会导致错误,但下面的代码显示了一

我最近开始从gmail API中看到以下错误:

{
  "code" : 400,
  "errors" : [ {
    "domain" : "global",
    "message" : "Mail service not enabled",
    "reason" : "failedPrecondition"
  } ],
  "message" : "Mail service not enabled"
}
我测试过的每个gmail api调用都会导致错误,但下面的代码显示了一个正常示例:

public static List<String> getThreadIdsFromRFC822MessageIds(Collection<String> messageIds, User u) throws IOException, NoOauthCredentialsException {
    List<String> queryTerms = new ArrayList<>();
    for (String messageId: messageIds) {
        queryTerms.add("rfc822msgid:" + messageId);
    }
    String queryString = Joiner.on(" OR ").join(queryTerms);
    String fieldSelectionString = "messages/threadId";

    ListMessagesResponse messages = executeMessageQuery(u, queryString, fieldSelectionString);
    List<String> threadIds = new ArrayList<>();
    if (messages.getMessages() != null) {
        for (Message m : messages.getMessages()) {
            threadIds.add(m.getThreadId());
        }
    }
    return threadIds;
}

private static ListMessagesResponse executeMessageQuery(User u, String queryString, String fieldSelectionString) throws IOException, NoOauthCredentialsException {
    assert fieldSelectionString.length() > 0;
    Gmail g = GmailAPIHelper.getGmailService(u);
    Gmail.Users.Messages.List query = g.users().messages().list("me").setQ(queryString).setFields(fieldSelectionString);
    ListMessagesResponse messages = executeAndLog(query, u);
    return messages;
}
public static List getThreadIDsfromRFC822MessageID(集合消息ID,用户u)引发IOException、NoAuthCredentialsException{
List queryTerms=new ArrayList();
for(字符串messageId:messageId){
添加(“rfc822msgid:+messageId”);
}
字符串queryString=Joiner.on(“或”).join(queryTerms);
String fieldSelectionString=“messages/threadId”;
ListMessagesResponse messages=executeMessageQuery(u、queryString、fieldSelectionString);
List threadid=new ArrayList();
if(messages.getMessages()!=null){
对于(消息m:messages.getMessages()){
add(m.getThreadId());
}
}
返回threadid;
}
私有静态ListMessagesResponse executeMessageQuery(用户u、字符串queryString、字符串字段SelectionString)引发IOException、NoAuthCredentialsException{
断言fieldSelectionString.length()>0;
Gmail g=GmailAPIHelper.getGmail服务(u);
Gmail.Users.Messages.List query=g.Users().Messages().List(“me”).setQ(queryString).setFields(fieldSelectionString);
ListMessagesResponse messages=executeAndLog(查询,u);
返回消息;
}
其中executeAndLog调用Gmail.Users.Messages.List对象上的.execute


此错误只影响了我的一小部分用户,错误消息表明这是权限问题。我希望要求我的用户重新授权可以解决这个问题,但我担心当出现权限问题时,我会收到这个错误消息,而不是更常见的401。有人看到这个错误吗?

您的试用期可能已经过期。在admin.google.com查看您的状态

转到并启用gmail API。这是一个相当新的功能;它应该对应于API:目录中帐户的isMailboxSetup标志。如果这是假的,那么Gmail API就不能用于该帐户。