2015-05-15 50 views
1

是否可以將Gmail API消息轉換爲OpenPop Mime消息?將Gmail API消息轉換爲OpenPop Mime消息

目前,我有:

List<Message> messagesList = new List<Message>(); 
List<string> rawMessagesList = new List<string>(); 
foreach(Message m in messages) 
{ 
    Message m2 = service.Users.Messages.Get("me", m.Id).Execute(); 
    string m3 = service.Users.Messages.Get("me", m.Id).Execute().Raw; 
    messagesList.Add(m2); 
    rawMessagesList.Add(m3); 
} 

string rMessage = rawMessagesList[0]; 
byte[] byteMessage = Encoding.ASCII.GetBytes(rMessage); 

OpenPop.Mime.Message openPopMessage = new OpenPop.Mime.Message(byteMessage); 
string newStringMessage = FindPlainTextInMessage(openPopMessage); 
Console.Read(); 

不幸的是,它返回的是什麼,因爲原始請求返回爲空。有沒有範圍要求,或者爲什麼gmail沒有返回原始信息的其他原因?

+0

來自API文檔:「Message.Raw:RFC 2822格式和base64url編碼字符串中的整個電子郵件消息,當提供format = RAW參數時,在messages.get和drafts.get響應中返回。看起來你需要以原始格式請求它以獲得完整的信息。 – Mitch

+0

謝謝你。不幸的是,原始數據爲空......正在考慮可能有一些方法來解析身體......但我會仔細檢查,看看我是否可以明確地要求它是未加工的。話雖如此,我是否正確使用base64url編碼字符串的編碼? – bordeo

+0

看起來你必須在'GetRequest'上指定格式作爲屬性。 https://developers.google.com/resources/api-libraries/documentation/gmail/v1/csharp/latest/classGoogle_1_1Apis_1_1Gmail_1_1v1_1_1UsersResource_1_1MessagesResource_1_1GetRequest.html – Mitch

回答

3

要獲取原始字符串,您需要在GetRequest中指定原始格式。

var emailRequest = svc.Users.Messages.Get("userId", "id"); 
emailRequest.Format = UsersResource.MessagesResource.GetRequest.FormatEnum.Raw; 

var rawString = emailRequest.Execute().Raw; 

此時,rawString是一個base64url編碼的字符串。你必須把它轉換成一個正常的字符串編碼爲字節之前(見http://tools.ietf.org/html/draft-ietf-jose-json-web-signature-08#appendix-C):

private static byte[] Base64UrlDecode(string arg) 
{ 
    // Convert from base64url string to base64 string 
    string s = arg; 
    s = s.Replace('-', '+').Replace('_', '/'); 
    switch(s.Length % 4) 
    { 
     case 0: 
      break;    // No pad chars in this case 
     case 2: 
      s += "=="; 
      break;    // Two pad chars 
     case 3: 
      s += "="; 
      break;    // One pad char 
     default: 
      throw new Exception("Illegal base64url string!"); 
    } 

    return Convert.FromBase64String(s); 
} 

然後可以使用Base64UrlDecode的結果來創建OpenPop MIME消息。

+0

哇,真棒,謝謝。 – bordeo