2016-04-01 54 views
1

它正在返回正確數量的消息,但唯一填充的字段是Id和ThreadId。其他所有內容爲空Message.Payload對於所有消息始終爲空。我如何獲得這些數據?

 var service = new GmailService(new BaseClientService.Initializer() 
     { 
      HttpClientInitializer = credential, 
      ApplicationName = ApplicationName, 
     }); 

     ListMessagesResponse response = service.Users.Messages.List(emailAddress).Execute(); 

     IList<Google.Apis.Gmail.v1.Data.Message> messages = response.Messages; 

     Console.WriteLine("Messages:"); 
     if (messages != null && messages.Count > 0) 
     { 
      foreach (var message in messages) 
      { 
       Console.WriteLine("{0}", message.Payload.Body); 
       Console.WriteLine(); 
      } 
     } 
     else 
     { 
      Console.WriteLine("No Messages found."); 
     } 

回答

6

Messages.List()只返回消息和線程ID。要獲取消息內容,需要調用Get()每個你有興趣在你的foreach循環示例的更新版本消息:

foreach (var message in messages) 
{ 
    Message m = service.Users.Messages.Get("me", message.Id).Execute(); 
    // m.Payload is populated now. 
    foreach (var part in message.Payload.Parts) 
    { 
     byte[] data = Convert.FromBase64String(part.Body.Data); 
     string decodedString = Encoding.UTF8.GetString(data); 
     Console.WriteLine(decodedString); 
    } 
} 
+0

你不會知道如何從Message.Paylod.Body.Data的信息以文字你會? –

+1

更新了代碼片段,其中包含解析MIME部分的示例。 –

+0

是的,那是我一直在嘗試的;我得到:輸入不是一個有效的Base-64字符串,因爲它包含一個非基本的64個字符, –