我正在使用 VB.Net,我按照说明从 Google 获取消息列表(gmail api v1)和任务(tasks api v1):
https://developers.google.com/gmail/api/v1/reference/users/messages/list https://developers.google.com/google-apps/tasks/v1/reference/tasks/list
但我收到错误 403(权限不足),但我的 datagridview 填充了以下带有空单元格的标题:
邮箱:
HistoryId - Id - LabelIds - 有效负载 - Raw - SizeEstimate - Snippet - ThreadId - Etag
任务:
Etag - 项目 - 种类 - NextPageToken
我检查了我的谷歌开发者控制台,一切都很好,API 已激活。
我也使用我的 xxxxxxxxx@developer.gserviceaccount.com(以防万一)。
还请遵循 Drive 和 Calendar apis 的说明,这些工作正常,但 Tasks 和 Gmail 给了我这个问题。
我使用凭据(客户端 ID 和客户端密码)进入。
我在 Google api explorer 上试过,一切正常。
我该如何解决这个错误?
这是我的任务和 Gmail 代码:
Imports Google.Apis.Auth.OAuth2
Imports Google.Apis.Services
Imports Google.Apis.Tasks.v1
Imports Google.Apis.Tasks.v1.Data.Tasks
Imports Google.Apis.Tasks.v1.Data
Imports System.Collections.Generic
Imports Google.Apis.Util.Store
Imports System.Threading
Imports System
Public Class Form1
Dim Secrets = New ClientSecrets()
Dim scope = New List(Of String)
Dim initializer = New BaseClientService.Initializer
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Secrets.ClientId = "MY CLIENT ID"
Secrets.ClientSecret = "MY CLIENT SECRET"
End Sub
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
scope.Add(TasksService.Scope.Tasks)
Try
Dim credential = GoogleWebAuthorizationBroker.AuthorizeAsync(Secrets, scope, "My Gmail account or developer account &.GOOGLE.COM", CancellationToken.None).Result()
initializer.HttpClientInitializer = credential
initializer.ApplicationName = "APP NAME"
Dim service = New TasksService(initializer)
Me.DataGridView1.DataSource = retrieveAllTasks(service)
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
Public Shared Function retrieveAllTasks(service As TasksService) As List(Of Tasks)
Dim result As New List(Of Tasks)()
Dim request As TasksResource.ListRequest = service.Tasks.List("@default")
Do
Try
Dim Gtasks As Tasks = request.Execute()
result.AddRange(Gtasks.Items)
request.PageToken = Gtasks.NextPageToken
Catch ex As Exception
MsgBox(ex.ToString)
request.PageToken = Nothing
End Try
Loop While Not [String].IsNullOrEmpty(request.PageToken)
Return result
End Function
End Class
Imports Google.Apis.Auth.OAuth2
Imports Google.Apis.Services
Imports Google.Apis.Tasks.v1
Imports Google.Apis.Tasks.v1.Data.Tasks
Imports Google.Apis.Tasks.v1.Data
Imports System.Collections.Generic
Imports Google.Apis.Util.Store
Imports System.Threading
Imports System
Imports Google.Apis.Gmail.v1
Imports Google.Apis.Gmail.v1.Data
Public Class Form1
Dim Secrets = New ClientSecrets()
Dim scope = New List(Of String)
Dim initializer = New BaseClientService.Initializer
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Secrets.ClientId = "CLIENT ID"
Secrets.ClientSecret = "CLIENT SECRET"
End Sub
Public Shared Function ListMessages(service As GmailService) As List(Of Message)
Dim result As New List(Of Message)()
Dim request As UsersResource.MessagesResource.ListRequest = service.Users.Messages.List("TARGET EMAIL")
Do
Try
Dim response As ListMessagesResponse = request.Execute()
result.AddRange(response.Messages)
request.PageToken = response.NextPageToken
Catch ex As Exception
MsgBox(ex.ToString)
End Try
Loop While Not [String].IsNullOrEmpty(request.PageToken)
Return result
End Function
Private Sub Button10_Click(sender As Object, e As EventArgs) Handles Button10.Click
Try
scope.Add(GmailService.Scope.MailGoogleCom)
Dim credential = GoogleWebAuthorizationBroker.AuthorizeAsync(Secrets, scope, "XXXXXXXX@developer.gserviceaccount.google.com", CancellationToken.None).Result()
initializer.HttpClientInitializer = credential
initializer.ApplicationName = "APP NAME"
Dim service = New GmailService(initializer)
Me.DataGridView1.DataSource = ListMessages(service)
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
End Class