因为 Windows 服务无法弹出用户界面,所以需要使用非交互式身份验证。具体做法是在 GoogleWebAuthorizationBroker.AuthorizeAsync 方法中添加 UserCredential 对象并设置 access_type=offline 和 approval_prompt=force 参数。代码示例如下:
UserCredential credential;
using (var stream = new FileStream("client_secret.json", FileMode.Open, FileAccess.Read))
{
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
new[] { GmailService.Scope.GmailReadonly },
"user", // 用户
CancellationToken.None,
new FileDataStore("MyApp")).Result;
}
var gmailService = new GmailService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName,
});
var request = gmailService.Users.Messages.List("me");
request.Q = "is:unread";
request.MaxResults = 10;
request.IncludeSpamTrash = false;
var threadsResponse = request.Execute();