Gmail API для JAVA - проект Eclipse - чтение новых писем и скачивание вложений - PullRequest
0 голосов
/ 05 мая 2020

Я работаю над студенческим проектом, где мне нужно использовать GMAIL API (Java), чтобы подключаться к почтовому серверу, получать новые сообщения и загружать вложения, если они есть. Я уже сделал это с помощью JavaMail API , но почтовый сервер, который должен использовать приложение, не принимает протоколы IMAP и POP3 , у него есть собственный веб-сервис.

У меня две проблемы.

  1. У меня проблемы даже со стартовым проектом в eclipse . Во-первых, я понятия не имею, как настроить соединение с почтовым сервером (например, учетную запись Gmail) и как указать имя пользователя и пароль. Я видел, что gmail api для авторизации использует Oauth2 .

  2. Второй, возможно, решить проще. Когда я установил соединение с почтовым сервером, как получать невидимые письма и загружать вложения?

Я думаю, что вторую часть я мог бы сделать сам, но без подключения даже бесполезно пытаться . Я читал официальную документацию несколько дней и совершенно запутался.

(Возможно, если у вас есть образец кода или аналогичный пример, было бы неплохо)

EDIT 1:

Сделано, теперь у меня эта ошибка

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 не найден в com.google.api.client.auth.oauth2. AuthorizationCodeFlow.Builder

Все импорты из Quickstart есть.

EDIT 2:

Я очень запутался сейчас

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

Строка:

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

Организация файлов и папок

Когда я проверяю System.out.print(System.getProperty("user.dir"));

Я получаю F:\NBS\eclipse\FetchMail

РЕДАКТИРОВАТЬ 3:

Удалены все файлы и начато заново, но затмение по-прежнему выглядит слепым Файл не найден

РЕДАКТИРОВАТЬ 4:

Протестированный метод .getResourceAsStream(path) внутри основного метода, и он находит учетные данные. json внутри \eclipse\FetchMail или любого другого файла, который мне нужен

Затем переместил файл в \eclipse\FetchMail\resources и позвонил .getResourceAsStream("/resources/credentials.json") также находит файл.

Но если попробовать это в методе getCredentials из Quickstart , появляется 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");
}

Ответы [ 2 ]

0 голосов
/ 12 мая 2020

Наконец решено, изменено .getResourceAsStream на конструктор FileInputStream(path), и он работает.

0 голосов
/ 06 мая 2020

Google использует Oauth2 для авторизации и аутентификации учетных записей с целью использования API Google. Для этого выполните следующие действия:

  1. В консоли разработчика Google нажмите «Учетные данные».
  2. Нажмите СОЗДАТЬ УЧЕТНЫЕ ДАННЫЕ и выберите идентификатор клиента Oauth enter image description here

  3. В этом случае выберите Desktop App

  4. Задайте любое Имя и нажмите Создать
  5. Вы получите экран с Client ID и Client Secret . Эти ключи позволят вашей учетной записи использовать API. Они хранятся в файле учетных данных. Вам не нужно ничего с ними делать, поэтому закройте окно.
  6. Загрузите файл JSON учетных данных. enter image description here

В коде Quickstart вы заметите эту строку:

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

Вы должны указать путь к файлу учетных данных. Измените имя файла на свое.

При первом запуске кода вы получите ссылку для принятия разрешений, указанных в областях. Это сгенерирует токен доступа , который позволяет приложению получать доступ к API, не запрашивая вмешательства человека, пока не истечет срок его действия .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...