C# 有人能确认ServiceAccount是否可以用于从任何常规gmail帐户下载电子邮件吗?
根据stackoverflow上的不同线程,我似乎可以为任何常规gmail帐户创建一个服务帐户。但无法从域管理面板分配权限 有人能确认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
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帐户以下载联系人、电子邮件等,或者它必须与域帐户一起使用。代码示例指出有效代码存在错误。您指出的另一个线程更具技术性,比如如何使用服务帐户。