在 C# 中使用 GMail API 创建标签

Posted

技术标签:

【中文标题】在 C# 中使用 GMail API 创建标签【英文标题】:Create labels with GMail API in C# 【发布时间】:2021-11-19 16:53:34 【问题描述】:

花了几个小时寻找有关如何使用服务帐户访问 Gmail API 的答案,发现我不能,除非我使用的是提供域范围授权的 GSuite 帐户,我来这里问您是否有一种方法可以使用上述 API 实际创建标签 私人帐户。我正在使用 Visual Studio 2019 和 C#。在“developers.google.com”中,有一个名为“Try this API”的工具,我可以使用我的 OAuth 2.0 创建一个标签,并且找到 here 的 .NET 快速入门也适用于列出我的标签。但为什么它不能让我创建标签?我已经启用了所有可能的作用域。

这是我得到的错误:

"Google.GoogleApiException: 'Google.Apis.Requests.RequestError 请求的身份验证范围不足。 [403] 错误 [ Message[Insufficient Permission] Location[-] Reason[insufficientPermissions] Domain[global]" enter image description here

【问题讨论】:

***.com/questions/53773650/…类似的问题,在第一个答案的cmets中解决了, 请编辑您的问题并包含您的代码 【参考方案1】:

Lables.create 方法需要权限才能在用户帐户上创建标签。用户必须同意该权限。

错误信息

Google.Apis.Requests.RequestError 请求的身份验证范围不足。

告诉您用户没有同意适当的范围。用户必须同意以下范围之一

如果您遵循快速入门,那么您可能只包含了GmailService.Scope.GmailReadonly。您将需要更改范围并再次请求用户的授权。请注意,您所遵循的教程不是针对服务帐户身份验证,而是针对 Oauth2 身份验证。

服务帐号

string ApplicationName = "Gmail API .NET Quickstart";
            const string serviceAccount = "xxxxx-smtp@xxxxx-api.iam.gserviceaccount.com";

            var certificate = new X509Certificate2(@"c:\xxxxx-api-ed4859a67674.p12", "notasecret", X509KeyStorageFlags.Exportable);

            var gsuiteUser = "xxxxx@xxxx.com";

            var serviceAccountCredentialInitializer = new ServiceAccountCredential.Initializer(serviceAccount)
            
                User = gsuiteUser,
                Scopes = new[]  GmailService.Scope.GmailSend, GmailService.Scope.GmailLabels 

            .FromCertificate(certificate);

            var credential = new ServiceAccountCredential(serviceAccountCredentialInitializer);
            if (!credential.RequestAccessTokenAsync(CancellationToken.None).Result)
                throw new InvalidOperationException("Access token failed.");

            var service = new GmailService(new BaseClientService.Initializer()
            
                HttpClientInitializer = credential,
                ApplicationName = ApplicationName,
            );

【讨论】:

你绝对是最棒的,我看到你回答了很多关于 Google API 的问题!谢谢!虽然,在我没有意识到我应该更改这些代码行中的范围之前,我已经将其视为一个答案!我总是在 Google.console 的项目中更改它们! 在 google 控制台中更改它们实际上只会告诉 google 你在做什么,它的代码定义了你实际要求的权限

以上是关于在 C# 中使用 GMail API 创建标签的主要内容,如果未能解决你的问题,请参考以下文章

在 c# 中使用 gmail API 修改消息标签时权限不足 [403] 错误

使用 Gmail API 阅读其他用户的电子邮件

在 C# 中为 Gmail API 创建消息

如何在浏览器中打开使用 Gmail API 创建的草稿?

如何在没有用户交互的情况下使用 GMail API 创建草稿

Gmail API 创建和发送电子邮件 .NET C#