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 });
我有一个 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 });