单个GoogleCredential和GmailService用于多个邮箱

问题描述

我正在创建一个简单的应用,该应用可以更改多个g-suite用户的假期设置。 目前,我正在为每个邮箱创建GoogleCredential和GmailService对象,如下所示:

var credentials = GoogleCredential.FromFile(FileName).CreateScoped(Scopes).CreateWithUser(User);

var gmailService = new GmailService(
    new BaseClientService.Initializer()
    {
        ApplicationName = ApplicationName,HttpClientInitializer = credentials
    });

var x = gmailService.Users.GetProfile(User);
var y = await x.ExecuteAsync();

Console.WriteLine(y.MessagesTotal);

long now = (long)DateTime.UtcNow.Subtract(
    new DateTime(1970,1,DateTimeKind.Utc)
).TotalMilliseconds;



VacationSettings settings = new VacationSettings
{
    EnableAutoReply = true,RestrictToDomain = false,ResponseBodyPlainText = "I'm on vacations :)",ResponseSubject = "Vacations",StartTime = now

};

UsersResource.SettingsResource.UpdateVacationRequest request = gmailService.Users.Settings.UpdateVacation(settings,"me");

var response = await request.ExecuteAsync();

上面的代码工作正常,但是我正在尝试将其用于多个邮箱。 我曾尝试在创建GoogleCredential并使用特定电子邮件而非“我”来调用API时删除CreateWithUser(User),例如:

var req1 = gmailService.Users.Settings.UpdateVacation(settings,"[email protected]").Execute();
var req2 = gmailService.Users.Settings.UpdateVacation(settings,"[email protected]").Execute();

但是我得到以下错误:

Google.GoogleApiException
HResult=0x80131500
Message=Google.Apis.Requests.RequestError
Precondition check failed. [400]
Errors [
Message[Precondition check failed.] Location[ - ] Reason[failedPrecondition] Domain[global]
]

所以我的服务帐户需要一些特殊的范围吗? 我在google API repo on GitHub中问了这个问题,但是建议我在这里问这个问题,以获得Gmail API小组的答案。

这有可能吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)