【发布时间】:2015-08-08 05:56:26
【问题描述】:
我将 Gmail API 认证流程设置如下:
string clientSecret = Settings.ClientSecret;
string clientId = Settings.ClientId;
Task<UserCredential> tCredential;
ClientSecrets clientSecrets = new ClientSecrets {ClientId = clientId, ClientSecret = clientSecret};
tCredential = GoogleWebAuthorizationBroker.AuthorizeAsync(
clientSecrets,
Scopes,
"user",
CancellationToken.None);
UserCredential credential;
try
{
credential = tCredential.Result;
}
catch (Exception ex)
{
throw;
}
_service = new GmailService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "Draft Sender", //applicationName,
});
我没有将凭据设置为保存在任何类型的文件中。但是,当我运行代码时,只会提示我允许访问电子邮件帐户一次。初始授权后,后续运行不会生成授权提示。在我尝试更改正在访问的电子邮件地址之前,这实际上是一件好事。
它的工作方式是我有两个电子邮件地址:一个个人电子邮件地址和一个测试电子邮件地址。我让程序运行,以便它访问我个人电子邮件地址的内容。然后,我需要开发删除消息的代码,所以我决定切换到一个测试电子邮件地址。
要使用 Gmail API 访问电子邮件地址,您必须启用 API 并在 Google 开发者控制台中为您要访问的每个电子邮件地址生成一个“客户端 ID”和“客户端密码”。我已经为个人电子邮件和测试电子邮件生成了两个值。
接下来,我更新了代码中的客户端 ID 和客户端密码,以便我的测试电子邮件成为目标,而不是我的个人电子邮件。
当我将 clientId 和 clientSecret 更新为新的电子邮件地址时,我最初收到授权提示,但授权提示要求访问旧电子邮件帐户。我继续前进并授权只是为了看看会发生什么。现在,即使更改了 clientId 和 secret,程序也可以访问原始电子邮件地址。我什至尝试更改原始电子邮件地址的密码,但程序仍然可以访问。
我必须相信有某种文件正在存储凭据,因为该程序如何访问电子邮件收件箱?如何找到此文件或获取此代码以访问不同的电子邮件收件箱?我是否需要手动创建文件才能绕过自动执行的操作?
【问题讨论】:
-
您是否尝试更改创建项目的用户的电子邮件地址?请清楚解释将“clientId 和 clientSecret 更新为新的电子邮件地址”是什么意思?另外,您是否尝试在更新到新电子邮件时删除 cookie?