背景:在我的组织中,我们使用谷歌的电子邮件服务。在ui中,我们允许用户更改他们的电子邮件别名,并删除他们的电子邮件别名。它们只能有一个电子邮件别名。
我在spring boot中使用directory api或admin sdk插入/删除别名。
问题:我正在使用插入别名, directoryService.users().aliases().insert(primaryEmailId, alias).execute();
新别名需要1分钟才能反映出来。
现在,如果用户希望在添加新别名后一分钟内删除/更改电子邮件别名,则删除请求将在后端失败,因为新插入的别名尚未反映出来。因此,将创建最新的别名,但不会删除旧的别名。
如何解决这个问题?解决这个问题的一个方法是在ui中禁用edit按钮1分钟,但这不是一个好的用户体验。
那还有别的办法吗?
插入别名方法:
Alias alias = new Alias();
alias.setAlias(newEmailAlias);
try {
directoryService.users().aliases().insert(primaryEmailId, alias).execute();
} catch (IOException e) {
e.printStackTrace();
}
获取别名方法:
public List<String> getAliases(String primaryEmailId) {
User user = null;
try {
user = directoryService.users().get(primaryEmailId).execute();
} catch (IOException e) {
e.printStackTrace();
}
return user.getAliases();
}
删除别名:
try {
directoryService.users().aliases().delete(primaryEmailId, emailAlias).execute();
} catch (IOException e) {
e.printStackTrace();
}
添加有关如何生成目录对象的更多详细信息。我正在使用服务帐户获取服务对象:
private static final String APPLICATION_NAME = "Google Aliases List";
private static final List<String> SCOPES = Collections.singletonList(DirectoryScopes.ADMIN_DIRECTORY_USER);
private static final String CREDENTIALS_FILE_PATH = "/gmail-api-randonnum-randomletter.json";
@Bean
public Directory directoryService() {
HttpTransport httpTransport = null;
Directory service = null;
try {
httpTransport = GoogleNetHttpTransport.newTrustedTransport();
JsonFactory jsonFactory = GsonFactory.getDefaultInstance();
HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter(getCredentials());
service = new Directory.Builder(httpTransport, jsonFactory, requestInitializer)
.setApplicationName(APPLICATION_NAME)
.build();
} catch (GeneralSecurityException | IOException e) {
System.out.println(e);
}
return service;
}
private GoogleCredentials getCredentials() throws IOException {
// Load client secrets.
InputStream in = GoogleDirectoryAPIConfig.class.getResourceAsStream(CREDENTIALS_FILE_PATH);
if (in == null) {
throw new FileNotFoundException("Resource not found: " + CREDENTIALS_FILE_PATH);
}
return GoogleCredentials.fromStream(in).createScoped(SCOPES).createDelegated("admin@email.com");
}
暂无答案!
目前还没有任何答案,快来回答吧!