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

Posted

技术标签:

【中文标题】Gmail API - 从需要的新邮件中下载附件 SCOPES - JAVA【英文标题】:Gmail API - Download attachments from new mails required SCOPES - JAVA 【发布时间】:2020-08-28 02:34:24 【问题描述】:

我正在开发使用 GMAIL API 从新邮件中下载附件的应用。我已经使用 JavaMail 制作了应用程序,但必须避免使用 IMAP 协议。

我已使用 Oauth2 成功登录邮件帐户,但现在我需要获取新邮件和下载附件方面的帮助。 我看到了我们按 ID 搜索消息的示例代码,但在这种情况下它不可用。

编辑 1: 我拥有的代码与来自的代码相同,只是在类中分隔 Quickstart

编辑 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)

编辑 3:

使SCOPES 使用GMAIL_READONLY 替换GMAIL_LABELS,我想我成功获取了看不见的邮件,现在我可以下载附件了。

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

listMessageresponse 不是null,而list 等于null

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

【问题讨论】:

请提供您目前拥有的代码。 您可以通过list 指定q 参数is:unread 来获取新邮件。 【参考方案1】:

您有权限问题(如例外所述)。可以通过在身份验证时请求 SCOPE 来获得权限。 如果您使用的是快速入门中的示例,您会看到他们使用的是 GMAIL_LABELS 范围:

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

要获取电子邮件内容,您需要添加更多范围,即GMAIL_READONLY 或其他允许访问电子邮件的范围(请参阅GmailScopes)。

根据您创建凭据/令牌的方式,您可能不被允许进入这些范围(然后只需更新您的 API 设置中的设置以获取适当的范围)

【讨论】:

谢谢,对SCOPES 进行了更改,终于成功了。我认为我成功地获取了看不见的邮件,但仍然需要以某种方式获取附件并下载它们。 太棒了。如果您认为问题已得到解答,请接受。 完成。抱歉,这里是新功能,所以我不知道该功能。 您对其余问题有任何想法吗(这仅解决了范围问题)?

以上是关于Gmail API - 从需要的新邮件中下载附件 SCOPES - JAVA的主要内容,如果未能解决你的问题,请参考以下文章

我也想获取邮件 Gmail API 附带的附件

使用 Python 进行 base64 解码,并使用基于 REST 的 Gmail API 下载附件

GMAIL API 在 C# 中发送带附件的电子邮件

如何使用 nodejs 下载 Gmail API 的附件?

如何让用户浏览器直接从 GMAIL 下载 gmail 附件?

使用imaplib下载多个附件