2017-08-09 104 views
0

如何獲取完整的消息,而不僅僅是使用gmail api的元數據?Gmail API .NET:獲取完整信息

我有一個服務帳戶,我能夠檢索郵件,但只能以元數據,原始和最小格式。如何以完整格式檢索完整郵件?下面的代碼工作正常

var request = service.Users.Messages.Get(userId, messageId); 
request.Format = UsersResource.MessagesResource.GetRequest.FormatEnum.Metadata; 
Message message = request.Execute(); 

然而,當我忽略的格式(因此我使用默認格式是FULL)或I格式改爲UsersResource.MessagesResource.GetRequest.FormatEnum.Full 我得到的錯誤:Metadata scope doesn't allow format FULL

我有包括以下範圍:

https://www.googleapis.com/auth/gmail.readonly, 
https://www.googleapis.com/auth/gmail.metadata, 
https://www.googleapis.com/auth/gmail.modify, 
https://mail.google.com/ 

如何獲得完整的信息?

回答

2

,我不得不刪除範圍的元數據,以便能夠得到完整的信息格式。

1

來自SO post的用戶具有相同的錯誤。

先試一試。

  1. 轉到https://security.google.com/settings/security/permissions
  2. 選擇您正在使用的應用程序。
  3. 單擊刪除>確定
  4. 下一次,只是請求您確切需要哪些權限。

另一件事,嘗試使用gmailMessage.payload.parts[0].body.data並將其解碼成可讀的文本,就從SO post如下:

import org.apache.commons.codec.binary.Base64; 
import org.apache.commons.codec.binary.StringUtils; 

System.out.println(StringUtils.newStringUtf8(Base64.decodeBase64(gmailMessage.payload.parts[0].body.data))); 

您還可以檢查this以備將來參考。

+0

我刪除了應用程序(Google API瀏覽器)並重試,但出現同樣的錯誤。第4點意味着什麼(下一次,只是請求你需要哪些權限)?我應該編輯我的範圍?我能夠執行請求,因此我無法訪問到gmailMessage.payload.parts [0] .body.data – jpo

0

嘗試這樣的事情

public String getMessage(string user_id, string message_id) 
    { 
     Message temp =service.Users.Messages.Get(user_id,message_id).Execute(); 
     var parts = temp.Payload.Parts; 
     string s = ""; 
     foreach (var part in parts) { 
       byte[] data = FromBase64ForUrlString(part.Body.Data); 
       s += Encoding.UTF8.GetString(data); 
     } 
     return s 
     } 

    public static byte[] FromBase64ForUrlString(string base64ForUrlInput) 
     { 
      int padChars = (base64ForUrlInput.Length % 4) == 0 ? 0 : (4 - (base64ForUrlInput.Length % 4)); 
      StringBuilder result = new StringBuilder(base64ForUrlInput, base64ForUrlInput.Length + padChars); 
      result.Append(String.Empty.PadRight(padChars, '=')); 
      result.Replace('-', '+'); 
      result.Replace('_', '/'); 
      return Convert.FromBase64String(result.ToString()); 
     } 
+0

我收到錯誤「元數據範圍不允許格式滿」。 Full是默認格式,所以當我沒有指定格式時,我得到這個錯誤。 – jpo