Gmail API - 从新邮件下载附件需要范围 - JAVA



我致力于使用GMAIL API从新邮件下载附件的应用程序。我已经用JavaMail制作了应用程序,但必须避免使用IMAP协议。

我已成功登录Oauth2的邮件帐户,但现在我需要有关获取新邮件和下载附件的帮助。 我看到了我们按 ID 搜索消息的示例代码,但在这种情况下它不可用。

编辑 1:我拥有的代码与代码相同,只是在类中分开 快速入门

编辑2:

String user = "me";
ListMessagesResponse listMessageResponse = service.users().messages().list(user).setQ("is:unseen").execute();
List<Message> list = listMessageResponse.getMessages();
for(Message m : list) {
List<MessagePart> part = m.getPayload().getParts();
for(MessagePart p: part) {
if(p.getFilename()!=null && p.getFilename().length()>0) {
System.out.println(p.getFilename());
}
}
}

我收到此行的错误

ListMessagesResponse listMessageResponse = service.users().messages().list(user).setQ("is:unseen").execute();

Exception in thread "main" com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
"code" : 403,
"errors" : [ {
"domain" : "global",
"message" : "Insufficient Permission",
"reason" : "insufficientPermissions"
} ],
"message" : "Insufficient Permission"
}
at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:150)
at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:451)
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1089)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:549)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:482)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:599)
at Main.main(Main.java:64)

编辑3:

SCOPESGMAIL_READONLY替换GMAIL_LABELS,我想我成功地获取了看不见的邮件,现在我必须以某种方式下载附件。

ListMessagesResponse listMessageResponse = service.users().messages().list(user).setQ("is:unseen").execute();

listMessageresponse不是null,而list等于null

List<Message> list = listMessageResponse.getMessages();

您有一个权限问题(如异常所述(。可以通过在身份验证时请求 SCOPE 来获取权限。 如果使用快速入门中的示例,你将看到它们使用的是GMAIL_LABELS范围:

private static final List<String> SCOPES = Collections.singletonList(GmailScopes.GMAIL_LABELS);

要获取电子邮件内容,您需要添加更多范围,即GMAIL_READONLY或其他允许访问电子邮件的作用域(请参阅 GmailScopes(。

根据您创建凭据/令牌的方式,您可能不被允许使用这些作用域(然后只需更新 API 设置中的设置以获得正确的作用域(

最新更新