所以现在的问题是:,我最近发这个帖子 。
解决方案我mentionned工作了一个令牌和一个API,但是当我试图处理两个API有两个令牌(Gmail和床单API)失败了。
那么,我想现在要做的就是让这两个工作,所以我对自己说“嘿,让我们创建一个服务帐户”。 就算我真的不明白这两种方法之间的差异。 服务帐户似乎从具有同意画面以防止(对吗?)。
我爬在网上寻找答案,但所有这些似乎失败。
我已经刷新令牌,使用GoogleCredential
代替Credential
,创建新的密钥等......有一两件事,虽然我没有试过是使用Gsuite帐户我使用的是基本账户。
所以,现在我在这里,我创建了一个新的P12文件点瞬间我得到的401
错误。 我将分享我的代码以更好地理解。
我的邮件类
public class mailService {
private static final String APPLICATION_NAME = "AHS";
private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
private static final String TOKENS_DIRECTORY_PATH = "tokens";
//I've added sheet scope as it is activated in my project
private static final Collection<String> SCOPES = Arrays.asList(GmailScopes.GMAIL_SEND, GmailScopes.GMAIL_LABELS, SheetsScopes.SPREADSHEETS);
private static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT) throws IOException, GeneralSecurityException {
File sa = new File("WEB-INF/mykeyfile.p12");
Credential credential = new GoogleCredential.Builder()
.setTransport(HTTP_TRANSPORT)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId(
"myapp@appspot.gserviceaccount.com")
.setServiceAccountScopes(SCOPES)
.setServiceAccountPrivateKeyFromP12File(sa)
.setServiceAccountUser("myemailadress@gmail.com")
.build();
//credential.refreshToken();
return (credential);
}
public static Gmail getService() throws GeneralSecurityException, IOException {
final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
/*Gmail service = new Gmail.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
.setApplicationName(APPLICATION_NAME)
.build();*/
Gmail service = new Gmail.Builder(HTTP_TRANSPORT, JSON_FACTORY, null)
.setHttpRequestInitializer(getCredentials(HTTP_TRANSPORT)).setApplicationName(APPLICATION_NAME).build();
return (service);
}
...
所以,给你一个更好的了解,我使用的角度和谷歌应用程序引擎创建一个web应用程序。 我wan't使用Gmail API从我的帐户发送邮件,还我使用表API来读取/电子表格/写。 只是要清楚,我对谷歌的点登录(用于Web应用程序的用户)的秘密文件,但这个是服务器端的代码,我不wan't用户看到一个同意画面。
我也问自己,如果我需要使用gcloud
以激活服务帐户。
我跑(目前)我的服务器在本地使用Eclipse和谷歌应用程序引擎的插件。
如果你需要其他的代码或精度为更好地理解这一问题让我知道