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

Create labels with GMail API in C#

我花了几个小时寻找有关如何使用服务帐户访问 Gmail API 的答案,结果发现我做不到,除非我使用的是随附的 GSuite 帐户全域授权,我来这里是想问你是否有办法使用上述 API and 来实际 创建标签帐户。我正在使用 Visual Studio 2019 和 C#。在“developers.google.com”中有一个名为“试试这个 API”的工具,我可以使用我的 OAuth 2.0 创建一个标签,而且 .NET Quickstart found here 也适用于列表我的标签。但是为什么它不能让我创建标签呢?我已经启用了所有可能的作用域。

这是我遇到的错误:

"Google.GoogleApiException: 'Google.Apis.Requests.RequestError Request had insufficient authentication scopes. [403] Errors [ Message[Insufficient Permission] Location[ - ] Reason[insufficientPermissions] Domain[global]" enter image description here

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

错误信息

Google.Apis.Requests.RequestError Request had insufficient authentication scopes.

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

如果您按照快速入门进行操作,那么您可能只包括了 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,
            });