Gmail api .Net 使用访问令牌发送邮件

Gmail api .Net send message using access token

我有一个 google 访问令牌,注册了 gmail api 和 google 联系人 api 的范围。我是这样理解的:

  var code = Request.QueryString["code"];

  OAuth2Parameters parameters = new OAuth2Parameters()
        {
            ClientId = clientId,
            ClientSecret = clientSecret,
            RedirectUri = redirectUri,
            Scope = scopes
        };

        if (code == null)
        {
            string url = OAuthUtil.CreateOAuth2AuthorizationUrl(parameters);

            return Redirect(url);
        }

        parameters.AccessCode = code;
        OAuthUtil.GetAccessToken(parameters);

现在我需要通过 gmail 发送电子邮件 api。但是在 google 文档中我发现只有一种在 gmail 中进行身份验证的方法 api 使用 UserCredential:

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

但是我已经有了可用的访问令牌,我该如何使用它来发送电子邮件?

据我所知,.NET 客户端不允许您从现有访问令牌创建 UserCredential 对象。相反,使用库提供的授权流程并使用它们生成正确的对象。

https://github.com/google/google-api-dotnet-client/issues/761

看起来您使用了与我相同的示例,结果是当您将代码交换为令牌响应时,这就是您需要传递给 UserCredential 对象的构造函数的流程。

var clientSecrets = new ClientSecrets { ClientId = clientId, ClientSecret = secret };
var flow = new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer
            {
                ClientSecrets = clientSecrets,
                Scopes = new[] { @"https://www.googleapis.com/auth/gmail.settings.basic" }

            });

            TokenResponse token = await flow.ExchangeCodeForTokenAsync("userEmail", authCode, "http://localhost:30297", CancellationToken.None);

            UserCredential cred = new UserCredential(flow, "me", token);

            string accessToken = token.AccessToken;
            var service = new GmailService(
                new BaseClientService.Initializer { HttpClientInitializer = cred });