简体   繁体   中英

Gmail API - Download attachments from new mails required SCOPES - JAVA

I work on app that download attachments from new messages using GMAIL API . I already made app with JavaMail but have to avoid using IMAP protocol.

I successfully logged into mail account with Oauth2 , but now I need help with fetching new mails and downloading attachments. I saw example code where we search for messages by ID but its not usable in this situation.

EDIT 1: Code that I have is same as code from, just separated in classes Quickstart

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());
            }
        }
    }

I get error for this line

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 working with replacing GMAIL_LABELS with GMAIL_READONLY , I think I successfully fetched unseen mails, now I have somehow to download attachments.

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

listMessageresponse is not null , while list equals null

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

You have a permission issue (as stated by the exception). Permissions can be obtained by requesting a SCOPE when authenticating. If you are using the sample from the quickstart, you will see they are using the GMAIL_LABELS scope:

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

To get the email content you need to add more scopes, ie GMAIL_READONLY or others scope allowing to access emails (see GmailScopes ).

Depending on how you create your credentials/token you might not be allowed to these scopes (then just update your settings in your API settings for the proper scopes)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM