如何解决使用google的admin sdkapi/目录api插入电子邮件别名的时间延迟问题?

mu0hgdu0  于 2021-07-16  发布在  Java
关注(0)|答案(0)|浏览(178)

背景:在我的组织中,我们使用谷歌的电子邮件服务。在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");
}

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题