使用 Gmail Java API 使用现有凭据创建 Gmail 实例
Creating a Gmail instance with existing credentials using Gmail Java API
一点背景知识: 我正在尝试使用 Clojure 做一个 API,它将请求用户允许阅读 his/her 电子邮件,然后将执行查询以呈现有序数据。
为此,我正在尝试使用具有现有令牌的 Gmail Java API。
使用 documentation available,我能够发出获取新令牌的请求,但我不知道如何使用之前检索到的令牌创建 com.google.api.services.gmail
的实例。
这是我的相关代码的样子:
(ns linelos.gmail.core
(:import (com.google.api.client.extensions.jetty.auth.oauth2 LocalServerReceiver)
(com.google.api.client.googleapis.auth.oauth2 GoogleAuthorizationCodeFlow
GoogleClientSecrets
GoogleAuthorizationCodeFlow$Builder)
(com.google.api.client.auth.oauth2 Credential BearerToken TokenResponse)
(com.google.api.client.googleapis.javanet GoogleNetHttpTransport)
(com.google.api.client.http HttpTransport)
(com.google.api.services.gmail Gmail Gmail$Builder)))
(def ^:private http-transport
(GoogleNetHttpTransport/newTrustedTransport))
(def ^:private json-factory (JacksonFactory/getDefaultInstance))
(defn get-connection [access-token]
(let [token-response (-> (TokenResponse.) (.setAccessToken access-token))
credential (-> (Credential. (BearerToken/authorizationHeaderAccessMethod))
(.setFromTokenResponse token-response))
; I'm stuck here
gmail-builder (Gmail$Builder. http-transport json-factory ???)
gmail (-> gmail-builder
(.setApplicationName app-name)
.build)]
gmail))
我是否还缺少其他东西,比如使用令牌创建请求的助手?
GoogleCredential credential = new GoogleCredential().setAccessToken(accessToken);
Plus plus = new Plus.builder(new NetHttpTransport(), JacksonFactory.getDefaultInstance(), credential)
.setApplicationName("Google-PlusSample/1.0")
.build();
Gmail$Builder
构造函数的第三个参数需要一个 com.google.api.client.http.HttpRequestInitializer
(或 null)的实例。他们的 GoogleCredential
class 实现了 该接口。您是否尝试过将 credential
作为第三个参数传递(您有 ???
)?
类似这样的方法可能有效:
(defn get-connection [access-token]
(let [token-response (-> (TokenResponse.) (.setAccessToken access-token))
credential (-> (Credential. (BearerToken/authorizationHeaderAccessMethod))
(.setFromTokenResponse token-response))]
(-> (Gmail$Builder. http-transport json-factory credential)
(.setApplicationName app-name)
(.build))))
一点背景知识: 我正在尝试使用 Clojure 做一个 API,它将请求用户允许阅读 his/her 电子邮件,然后将执行查询以呈现有序数据。
为此,我正在尝试使用具有现有令牌的 Gmail Java API。
使用 documentation available,我能够发出获取新令牌的请求,但我不知道如何使用之前检索到的令牌创建 com.google.api.services.gmail
的实例。
这是我的相关代码的样子:
(ns linelos.gmail.core
(:import (com.google.api.client.extensions.jetty.auth.oauth2 LocalServerReceiver)
(com.google.api.client.googleapis.auth.oauth2 GoogleAuthorizationCodeFlow
GoogleClientSecrets
GoogleAuthorizationCodeFlow$Builder)
(com.google.api.client.auth.oauth2 Credential BearerToken TokenResponse)
(com.google.api.client.googleapis.javanet GoogleNetHttpTransport)
(com.google.api.client.http HttpTransport)
(com.google.api.services.gmail Gmail Gmail$Builder)))
(def ^:private http-transport
(GoogleNetHttpTransport/newTrustedTransport))
(def ^:private json-factory (JacksonFactory/getDefaultInstance))
(defn get-connection [access-token]
(let [token-response (-> (TokenResponse.) (.setAccessToken access-token))
credential (-> (Credential. (BearerToken/authorizationHeaderAccessMethod))
(.setFromTokenResponse token-response))
; I'm stuck here
gmail-builder (Gmail$Builder. http-transport json-factory ???)
gmail (-> gmail-builder
(.setApplicationName app-name)
.build)]
gmail))
我是否还缺少其他东西,比如使用令牌创建请求的助手?
GoogleCredential credential = new GoogleCredential().setAccessToken(accessToken);
Plus plus = new Plus.builder(new NetHttpTransport(), JacksonFactory.getDefaultInstance(), credential)
.setApplicationName("Google-PlusSample/1.0")
.build();
Gmail$Builder
构造函数的第三个参数需要一个 com.google.api.client.http.HttpRequestInitializer
(或 null)的实例。他们的 GoogleCredential
class 实现了 该接口。您是否尝试过将 credential
作为第三个参数传递(您有 ???
)?
类似这样的方法可能有效:
(defn get-connection [access-token]
(let [token-response (-> (TokenResponse.) (.setAccessToken access-token))
credential (-> (Credential. (BearerToken/authorizationHeaderAccessMethod))
(.setFromTokenResponse token-response))]
(-> (Gmail$Builder. http-transport json-factory credential)
(.setApplicationName app-name)
(.build))))