【问题标题】:Issue with "Get" message with gmail api v1 (Net)gmail api v1(网络)的“获取”消息问题
【发布时间】:2014-11-15 20:34:19
【问题描述】:

我试图在 datagridview 中获取 gmail 消息的信息,但只返回空的 datagridview(即使我删除了“不返回任何内容”行)但是当我在 apis-explorer 中尝试时,我得到 200 ok 响应。我做错了什么?

我使用的代码来自谷歌开发者文档:

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 GetMessage(service As GmailService, userId As [String], messageId As [String]) As Message
        Try
            Return service.Users.Messages.Get(userId, messageId).Execute()
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
        'Return Nothing
    End Function
    Private Sub Button14_Click(sender As Object, e As EventArgs) Handles Button14.Click
        Dim userId As String = "GMAIL ACCOUNT"
        Dim messageId As String = "MESSAGE ID"
        Try
            scope.Add(GmailService.Scope.MailGoogleCom)
            Dim credential = GoogleWebAuthorizationBroker.AuthorizeAsync(Secrets, scope, "XXXXXXXXXXXX@developer.gserviceaccount.google.com", CancellationToken.None).Result()
            initializer.HttpClientInitializer = credential
            initializer.ApplicationName = "APP NAME"
            Dim service = New GmailService(initializer)
            Me.DataGridView1.DataSource = GetMessage(service, userId, messageId)
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub
End Class

【问题讨论】:

  • 你能接到任何上班的电话吗?说一些像 label.list() 这样的琐碎事情?我认为它没有抛出异常?如果是这种情况,您能否打印出来并包含收到的整个响应(HTTP 标头和正文)?

标签: vb.net datagridview google-api-dotnet-client gmail-api


【解决方案1】:

感谢 Eric,但我已经解决了一些更改问题。我希望这对其他人有所帮助,因为谷歌开发人员文档不太清楚

Imports Google.Apis.Auth.OAuth2
Imports Google.Apis.Services
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 GetMessage(service As GmailService, userId As [String], messageId As [String]) As Message
        Try
            Return service.Users.Messages.Get(userId, messageId).Execute
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try

        Return Nothing
    End Function

    Private Sub Button14_Click(sender As Object, e As EventArgs) Handles Button14.Click
        Try
            scope.Add(GmailService.Scope.MailGoogleCom)
            Dim credential = GoogleWebAuthorizationBroker.AuthorizeAsync(Secrets, scope, "XXXXXXXXXXXXX@developer.gserviceaccount.google.com", CancellationToken.None).Result()
            initializer.HttpClientInitializer = credential
            initializer.ApplicationName = "APP NAME"
            Dim service = New GmailService(initializer)
            Dim userId As String = "EMAIL"
            Dim messageId As String = "MESSAGE ID"

            Me.DataGridView1.DataSource = GetMessage(service, userId, messageId).Payload.Headers
            TextBox1.Text = (GetMessage(service, userId, messageId).Snippet)        
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub
End Class 

【讨论】:

  • 与其发布一个全新的代码段,您能简单总结一下最初的错误是什么吗?
  • 抱歉,我是 api 新手。我不知道最初是什么错误,我只是将“dim userId”和“dim messageId”放在另一个地方,然后代码就可以完美运行了。
  • 我对 .NET 不是特别熟悉,但是将变量声明“dim ...”从 try 块外部移动到内部似乎不太可能在这里改变任何东西——我认为那是一个红鲱鱼,你的问题在别处。
猜你喜欢
  • 1970-01-01
  • 2016-03-18
  • 2018-01-17
  • 2015-05-13
  • 2014-06-17
  • 2016-09-21
  • 2016-12-08
  • 2018-07-14
  • 1970-01-01
相关资源
最近更新 更多