简体   繁体   中英

Gmail API for JAVA - Eclipse project - Read new mails and download attachments

I work on student project where I have to use GMAIL API ( Java ), to connect to mail server, get new messages and download attachments if there is any. I already done this with JavaMail API , but mail server that should use app doesn't accept IMAP and POP3 protocols, it has own web service.

I have two problems.

  1. I have troubles even with starting project in eclipse . First, I have no idea how to set up connection with mail server (for example gmail account) and how to provide username and password. I saw that gmail api for authorization uses Oauth2 .

  2. Second one is maybe easier to solve. When I have established connection to mail server, how to fetch unseen mails and download attachments?

I guess that second part I could do on my own, but without connection its even useless to try. I was reading official documentation for few days and I am quite confused.

(Maybe if you have some code sample or similar example it would be nice)

EDIT 1:

Done that, now I have this error

GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
                HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
                .setDataStoreFactory(new FileDataStoreFactory(new java.io.File(TOKENS_DIRECTORY_PATH)))
                .setAccessType("offline")
                .build();

setAccessType is not found in com.google.api.client.auth.oauth2.AuthorizationCodeFlow.Builder

All Imports from Quickstart are there.

EDIT 2:

I am quite confused now

Exception in thread "main" java.io.FileNotFoundException: Resource not found: /resources/credentials.json

Line:

private static final String CREDENTIALS_FILE_PATH = "/resources/credentials.json";

File&Folder organization

When I check System.out.print(System.getProperty("user.dir"));

I get F:\NBS\eclipse\FetchMail

EDIT 3:

Deleted all files and started over again but eclipse still looks blind File not found

EDIT 4:

Tested method .getResourceAsStream(path) inside Main method and it finds credential.json inside \eclipse\FetchMail or any other file i want

Then moved file to \eclipse\FetchMail\resources and call .getResourceAsStream("/resources/credentials.json") also finds file.

But when try this in getCredentials method from Quickstart , there is FileNotFound exception .

 private static final String CREDENTIALS_FILE_PATH = "/resources/credentials.json";


 private static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT) throws IOException {
    // Load client secrets.
    InputStream in = Main.class.getResourceAsStream(CREDENTIALS_FILE_PATH);
    if (in == null) {
        throw new FileNotFoundException("Resource not found: " + CREDENTIALS_FILE_PATH);
    }
    GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));

    // Build flow and trigger user authorization request.
    GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
            HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
            .setDataStoreFactory(new FileDataStoreFactory(new java.io.File(TOKENS_DIRECTORY_PATH)))
            .setAccessType("offline")
            .build();
    LocalServerReceiver receiver = new LocalServerReceiver.Builder().setPort(8888).build();
    return new AuthorizationCodeInstalledApp(flow, receiver).authorize("user");
}

Google uses Oauth2 to authorize and authenticate accounts in order to use the Google APIs. To do so, follow the next steps:

  1. In your Google Developer Console , click on Credentials.
  2. Click on CREATE CREDENTIALS and Select Oauth Client Id 在此处输入图像描述

  3. In this case, choose Desktop App

  4. Set any Name and click on Create
  5. You will get a screen with the Client ID and the Client Secret . These keys will authorize your account to use the APIs. They are stored in the credentials file. You don't need to do anything with them, so close the window.
  6. Download the credential's JSON file. 在此处输入图像描述

In the Quickstart code, you will notice this line:

private static final String CREDENTIALS_FILE_PATH = "/credentials.json";

You have to set the path of your credentials file. Change the name of the file to yours.

When running the code for the first time, you will get a link to accept the permissions specified in the Scopes. This will generate an Access token which allows the application to access the API without asking for human interaction until it expires .

Finally solved, changed .getResourceAsStream with FileInputStream(path) constructor and it works.

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