Gmail API - 从新邮件中下载附件 需要 SCOPES - JAVA

问题描述 投票:0回答:1

我正在开发一个应用程序,可以从新邮件中下载附件,使用的是 GMAIL API. 我已经做了应用程序与 JavaMail 但要避免使用 IMAP 协议。

我成功登录到邮件账户,用 Oauth2但现在我需要帮助获取新邮件和下载附件.我看到了通过ID搜索邮件的例子代码,但它在这种情况下无法使用。

EDIT 1 :我所拥有的代码与来自的代码相同,只是在类中分开了。快速启动

EDIT 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)

EDIT 3:

Made SCOPES 替换的工作 GMAIL_LABELSGMAIL_READONLY我想我已经成功地获取了未见过的邮件,现在我必须以某种方式下载附件。

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

listMessageresponse 是不 nulllist 等于 null

List<Message> list = listMessageResponse.getMessages();
java email gmail-api
1个回答
0
投票

你有一个权限问题(如异常所说)。如果你使用的是快速入门中的示例,你会看到他们使用的是Gmail API。GMAIL_LABELS 范围。

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

为了获得邮件内容,你需要添加更多的作用域,即 GMAIL_READONLY 或其他允许访问电子邮件的作用域(参见 GmailScopes).

根据您创建您的凭证令牌的方式,您可能不被允许进入这些作用域(然后在您的API设置中更新您的设置,以获得适当的作用域

© www.soinside.com 2019 - 2024. All rights reserved.