gpt4 book ai didi

c# - 我们可以使用服务帐户访问 GMAIL API 吗?

转载 作者:可可西里 更新时间:2023-11-01 08:38:07 24 4
gpt4 key购买 nike

我有一个桌面应用程序,可以通过 REST 接口(interface)使用 GMAIL API 阅读邮件。我想使用服务帐户,以便我们可以使用域设置下载邮件,并且用户交互为空。我能够成功地创建 Gmail 服务实例,但是当我尝试访问任何 Gmail API 方法(如获取邮件列表或任何其他方法)时,我得到一个异常提示

Google.Apis.Auth.OAuth2.Responses.TokenResponseException: Error:"access_denied", Description:"Requested client not authorized."

我已在开发者控制台完成所有设置,并将范围添加到我的 gapps 域。

Gmail API 是否支持服务帐户?使用相同的设置和服务帐户,我能够使用云端硬盘服务和 API 获取 Google 云端硬盘中所有文件的列表。

最佳答案

我使用以下 C# 代码从服务帐户访问 Gmail

String serviceAccountEmail =
"999999999-9nqenknknknpmdvif7onn2kvusnqct2c@developer.gserviceaccount.com";

var certificate = new X509Certificate2(
AppDomain.CurrentDomain.BaseDirectory +
"certs//fe433c710f4980a8cc3dda83e54cf7c3bb242a46-privatekey.p12",
"notasecret",
X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable);

string userEmail = "user@domainhere.com.au";

ServiceAccountCredential credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(serviceAccountEmail)
{
User = userEmail,
Scopes = new[] { "https://mail.google.com/" }
}.FromCertificate(certificate)
);

if (credential.RequestAccessTokenAsync(CancellationToken.None).Result)
{
GmailService gs = new GmailService(
new Google.Apis.Services.BaseClientService.Initializer()
{
ApplicationName = "iLink",
HttpClientInitializer = credential
}
);

UsersResource.MessagesResource.GetRequest gr =
gs.Users.Messages.Get(userEmail, msgId);
gr.Format = UsersResource.MessagesResource.GetRequest.FormatEnum.Raw;
Message m = gr.Execute();

if (gr.Format == UsersResource.MessagesResource.GetRequest.FormatEnum.Raw)
{
byte[] decodedByte = FromBase64ForUrlString(m.Raw);
string base64Encoded = Convert.ToString(decodedByte);
MailMessage msg = new MailMessage();
msg.LoadMessage(decodedByte);
}
}

关于c# - 我们可以使用服务帐户访问 GMAIL API 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24779138/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com