C# 有人能确认ServiceAccount是否可以用于从任何常规gmail帐户下载电子邮件吗?

C# 有人能确认ServiceAccount是否可以用于从任何常规gmail帐户下载电子邮件吗?,c#,google-api,gmail-api,google-api-dotnet-client,service-accounts,C#,Google Api,Gmail Api,Google Api Dotnet Client,Service Accounts,根据stackoverflow上的不同线程,我似乎可以为任何常规gmail帐户创建一个服务帐户。但无法从域管理面板分配权限 有人能确认ServiceAccount是否可以用于从任何常规gmail帐户下载电子邮件吗 如果我使用以下代码: ServiceAccountCredential credential = new ServiceAccountCredential( new ServiceAccountCredential.Initializer(serviceAcco

根据stackoverflow上的不同线程,我似乎可以为任何常规gmail帐户创建一个服务帐户。但无法从域管理面板分配权限

有人能确认ServiceAccount是否可以用于从任何常规gmail帐户下载电子邮件吗

如果我使用以下代码:

    ServiceAccountCredential credential = new ServiceAccountCredential(
        new ServiceAccountCredential.Initializer(serviceAccountEmail)
        {
            User = userEmail,
            Scopes = new string[] { Gmail.v1.GmailService.Scope.GmailReadonly }
        }.FromCertificate(certificate)
    );
然后我得到以下错误:

{"Error:\"unauthorized_client\", Description:\"Unauthorized client or scope in request.\", Uri:\"\""}
如果我从ServiceAccountCredential构造函数中删除用户对象,那么错误就消失了。但是,当我使用任何谷歌服务时,都会出现以下错误:

{"Google.Apis.Requests.RequestError\r\nBad Request [400]\r\nErrors [\r\n\tMessage[Bad Request] Location[ - ] Reason[failedPrecondition] Domain[global]\r\n]\r\n"}
我确实从开发者控制台为服务帐户设置了“查看器”角色,并启用了GoogleAPI。 这是否与域帐户或域帐户的权限相关

完整代码如下:

String serviceAccountEmail = "gmailscraperserviceaccount2@gmailscraper-1221.iam.gserviceaccount.com";

            var certificate = new X509Certificate2("key2.p12", "notasecret",
                X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable);

            string userEmail = "abc@gmail.com";

            ServiceAccountCredential credential = new ServiceAccountCredential(
                new ServiceAccountCredential.Initializer(serviceAccountEmail)
                {
                    Scopes = new string[] { Gmail.v1.GmailService.Scope.GmailReadonly }
                }.FromCertificate(certificate)
            );

            if (credential.RequestAccessTokenAsync(CancellationToken.None).Result)
            {
                Google.Apis.Auth.OAuth2.Responses.TokenResponse toke = credential.Token;
                GmailService gs = new GmailService(
                    new Google.Apis.Services.BaseClientService.Initializer()
                    {
                        ApplicationName = "TestApp",
                        HttpClientInitializer = credential
                    }
                );

                UsersResource.MessagesResource.ListRequest allMessageRequest = gs.Users.Messages.List(userEmail);
                Google.Apis.Gmail.v1.Data.ListMessagesResponse response = allMessageRequest.Execute();

密码不是必需的,因为我们正在使用oAuth并获取令牌。我已经添加了完整的代码块,以提供一个更清晰的图片。这个副本是如何复制的?这是为了确认服务帐户是否可以用于常规gamil帐户以下载联系人、电子邮件等,或者它必须与域帐户一起使用。代码示例指出有效代码存在错误。您提到的另一个线程更具技术性,比如如何使用服务帐户。密码是不必要的,因为我们正在使用oAuth并获取令牌。我已经添加了完整的代码块,以提供一个更清晰的图片。这个副本是如何复制的?这是为了确认服务帐户是否可以用于常规gamil帐户以下载联系人、电子邮件等,或者它必须与域帐户一起使用。代码示例指出有效代码存在错误。您指出的另一个线程更具技术性,比如如何使用服务帐户。