Java GmailApi读取未读消息

Java GmailApi读取未读消息,java,gmail-api,gmail-imap,Java,Gmail Api,Gmail Imap,我可以连接到gmail api,并且可以阅读标签。但是当我尝试读取消息时,出现了一个错误403(ListMessagesResponse listMessageResponse=service.users().messages().list(“me”).execute()) 我获得服务的代码: `final String CLIENT_ID = "////"; final String CLIENT_SECRET = "///////"; final String

我可以连接到gmail api,并且可以阅读标签。但是当我尝试读取消息时,出现了一个错误403(
ListMessagesResponse listMessageResponse=service.users().messages().list(“me”).execute()

我获得服务的代码:

`final String CLIENT_ID = "////";
        final String CLIENT_SECRET = "///////";
        final String APPLICATION_NAME = "///////////////";
        final String REFRESH_TOKEN = "////////////////";
        final java.io.File DATA_STORE_DIR = new java.io.File("/", "");
        FileDataStoreFactory DATA_STORE_FACTORY;
        final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
        final List<Set<String>> SCOPES = Arrays.asList(GmailScopes.all());
        HttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
        DATA_STORE_FACTORY = new FileDataStoreFactory(DATA_STORE_DIR);
        Credential credential = new GoogleCredential.Builder()
                .setClientSecrets(CLIENT_ID, CLIENT_SECRET)
                .setJsonFactory(JSON_FACTORY).setTransport(HTTP_TRANSPORT).build()
                .setRefreshToken(REFRESH_TOKEN);
        credential.refreshToken();
        return new Gmail.Builder(
                HTTP_TRANSPORT, JSON_FACTORY, credential)
                .setApplicationName(APPLICATION_NAME)
                .build();`
`final String CLIENT_ID=“/”;
最后一个字符串CLIENT_SECRET=“//”;
最终字符串应用程序\u NAME=“//”;
最终字符串刷新\u标记=“//”;
final java.io.File DATA_STORE_DIR=new java.io.File(“/”,”);
文件数据存储工厂数据存储工厂;
最终的JsonFactory JSON_FACTORY=JacksonFactory.getDefaultInstance();
final List SCOPES=Arrays.asList(GmailScopes.all());
HttpTransport HTTP_TRANSPORT=GoogleNetHttpTransport.newTrustedTransport();
DATA\u STORE\u FACTORY=新文件datastorefactory(DATA\u STORE\u DIR);
凭证凭证=新的GoogleCredential.Builder()
.setClientSecrets(客户端ID、客户端机密)
.setJsonFactory(JSON_FACTORY).setTransport(HTTP_TRANSPORT).build()
.setRefreshToken(刷新令牌);
credential.refreshtToken();
返回新的Gmail.Builder(
HTTP_传输、JSON_工厂、凭证)
.setApplicationName(应用程序名称)
.build()`
以及获取邮件的代码(我希望获取所有未读邮件并保存附件)

`ListMessagesResponse listMessageResponse=service.users().messages()
.list(“我”).execute();
List List=listMessageResponse.getMessages();
用于(消息混乱:列表){
System.out.println(mess.getRaw());
}`

看起来您正在尝试在执行授权调用之前刷新令牌

看看gmail api示例中的authorize()方法:

`final String CLIENT_ID = "////";
        final String CLIENT_SECRET = "///////";
        final String APPLICATION_NAME = "///////////////";
        final String REFRESH_TOKEN = "////////////////";
        final java.io.File DATA_STORE_DIR = new java.io.File("/", "");
        FileDataStoreFactory DATA_STORE_FACTORY;
        final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
        final List<Set<String>> SCOPES = Arrays.asList(GmailScopes.all());
        HttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
        DATA_STORE_FACTORY = new FileDataStoreFactory(DATA_STORE_DIR);
        Credential credential = new GoogleCredential.Builder()
                .setClientSecrets(CLIENT_ID, CLIENT_SECRET)
                .setJsonFactory(JSON_FACTORY).setTransport(HTTP_TRANSPORT).build()
                .setRefreshToken(REFRESH_TOKEN);
        credential.refreshToken();
        return new Gmail.Builder(
                HTTP_TRANSPORT, JSON_FACTORY, credential)
                .setApplicationName(APPLICATION_NAME)
                .build();`
`ListMessagesResponse listMessageResponse = service.users().messages()
                .list("me").execute();

        List<Message> list = listMessageResponse.getMessages();
        for (Message mess : list) {
            System.out.println(mess.getRaw());
        }`