2017-06-21 18 views
2

我正在使用Users.messages.get终端获得gmail响应,其格式为this格式根据文档。Gmail api从Users.message资源获取电子邮件正文(文本或HTML)的正确方式

从上面的响应中解码/解密邮件正文的正确方法是什么?

在我的情况,例如,在响应中的“份”阵列字段看起来像这样:

[ 
    { 
    "partId": "0.0", 
    "mimeType": "text/plain", 
    "filename": "", 
    "headers": [ 
     { 
     "name": "Content-Type", 
     "value": "text/plain; charset=\"UTF-8\"; format=flowed; delsp=yes" 
     }, 
     { 
     "name": "Content-Transfer-Encoding", 
     "value": "base64" 
     } 
    ], 
    "body": { 
     "size": 1628, 
     "data": "R29vZ2xlIGxvZ28NCg0KSGVsbG8gQXBwcyBTY3JpcHQgdXNlciwNCg0KVGhpcyBub3RpZmljYXRpb24gaXMgdG8gYWxlcnQgeW91IG9mIGFuIHVwZGF0ZSB0byBvbmUgb3IgbW9yZSBvZiB5b3VyIEFwcHMgIA0KU2NyaXB0IHByb2plY3RzIHRoYXQgYXJlIGF0dGFjaGVkIHRvIERvY3MsIFNoZWV0cywgYW5kIEZvcm1zIGRvY3VtZW50cyB3aXRoICANCnNjcmlwdCBzaGFyaW5nIHNldHRpbmdzIHRoYXQgZGlmZmVyIGZyb20gdGhvc2Ugb2YgdGhlIGRvY3VtZW50Lg0KDQpTdGFydGluZyBvbiBvciBhZnRlciBKdWx5IDZ0aCwgMjAxNywgdGhvc2Ugc2NyaXB0IHNoYXJpbmcgc2V0dGluZ3Mgd2lsbCBiZSAgDQp1cGRhdGVkIHRvIG1hdGNoIHRob3NlIG9mIHRoZSBkb2N1bWVudHMgdG8gd2hpY2ggdGhleSdyZSBhdHRhY2hlZC4NCg0KVGhlIHNoYXJpbmcgc2V0dGluZ3MgdXBkYXRlIHNpbXBsaWZpZXMgc2hhcmluZyBzZXR0aW5ncyBmb3IgZG9jdW1lbnRzIHdpdGggIA0KYXR0YWNoZWQgQXBwcyBTY3JpcHQgcHJvamVjdHMgYnkgdHJlYXRpbmcgdGhlbSBsaWtlIGEgc2luZ2xlIGRvY3VtZW50Lg0KDQpBcyBhIHJlc3VsdCBvZiB0aGUgc2hhcmluZyBzZXR0aW5ncyB1cGRhdGUsIGFuZCBhY2NvcmRpbmcgdG8gdGhlIGRvY3VtZW50ICANCmFjY2VzcyBsZXZlbCwgc29tZSB1c2VycyBtYXk6DQoNCg0KR2FpbiBvciBsb3NlIGFjY2VzcyB0byBhZmZlY3RlZCBwcm9qZWN0cw0KQ2hhbmdlIHRoZWlyIGFjY2VzcyBsZXZlbHMgKGZvciBleGFtcGxlLCBvd25lciwgZWRpdG9yLCByZWFkZXIpDQoNClRoaXMgY2hhbmdlIHdpbGwgbm90IGFmZmVjdCBzaGFyaW5nIHNldHRpbmdzIGZvciB0aGUgZG9jdW1lbnRzLiBPbmx5ICANCnNoYXJpbmcgc2V0dGluZ3Mgb2YgYXR0YWNoZWQgQXBwcyBTY3JpcHQgcHJvamVjdHMgd2lsbCBiZSB1cGRhdGVkLg0KDQpBIENTViBmaWxlIGF0dGFjaGVkIHRvIHRoaXMgbWVzc2FnZSBsaXN0cyBhbGwgQXBwcyBTY3JpcHQgcHJvamVjdHMgd2hlcmUgIA0KeW91J3JlIHRoZSBvd25lciBhbmQgd2hvc2Ugc2hhcmluZyBzZXR0aW5ncyB3aWxsIGNoYW5nZSBhcyBhIHJlc3VsdCBvZiB0aGlzICANCm1pZ3JhdGlvbi4gUGxlYXNlIHJldmlldyB0aGVzZSBkb2N1bWVudHMgYW5kIGNvbmZpcm0gdGhhdCB0aGVpciBzaGFyaW5nICANCnNldHRpbmdzIGFyZSBhbHNvIGFwcHJvcHJpYXRlIGZvciB0aGVpciBhdHRhY2hlZCBBcHBzIFNjcmlwdCBwcm9qZWN0cy4NCg0KSWYgY2hhbmdlcyBhcmUgcmVxdWlyZWQsIGZvciBlYWNoIGRvY3VtZW50IHdoZXJlIHNldHRpbmdzIG5lZWQgdG8gYmUgIA0KY2hhbmdlZCwgdXNlIG9uZSBvZiB0aGVzZSBtZXRob2RzOg0KDQoNCkluIERvY3Mgb3IgU2hlZXRzLCBjbGljayBTaGFyZS4NCkluIEZvcm1zLCBjbGljayBBZGQgQ29sbGFib3JhdG9yLg0KSW4gR29vZ2xlIERyaXZlLCBjbGljayBTaGFyZS4NCg0KU2luY2VyZWx5LA0KDQpUaGUgQXBwcyBTY3JpcHQgVGVhbQ0KDQoNCsKpIDIwMTcgR29vZ2xlIEluYy4gMTYwMCBBbXBoaXRoZWF0cmUgUGFya3dheSwgTW91bnRhaW4gVmlldywgQ0EgOTQwNDMNCg0KWW91IGhhdmUgcmVjZWl2ZWQgdGhpcyB1cGRhdGUgYXMgYSBHIFN1aXRlIHNlcnZpY2UgYW5ub3VuY2VtZW50Lg0KDQo=" 
    } 
    }, 
    { 
    "partId": "0.1", 
    "mimeType": "text/html", 
    "filename": "", 
    "headers": [ 
     { 
     "name": "Content-Type", 
     "value": "text/html; charset=\"UTF-8\"" 
     }, 
     { 
     "name": "Content-Transfer-Encoding", 
     "value": "quoted-printable" 
     } 
    ], 
    "body": { 
     "size": 3112, 
     "data": "PCEtLSBUaGlzIGNvbnRhaW5zIENTUyBpbmZvLCBzdGFydHMgdGhlIGJvZHksIGFuZCBpbnNlcnRzIHRoZSBHb29nbGUgbG9nbyBoZWFkZXIgLS0-DQo8c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IFJvYm90bywgQXJpYWwsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgY29sb3I6ICMwMDAwMDA7Ij4gPC9zcGFuPg0KPGRpdiBzdHlsZT0icGFkZGluZy10b3A6IDIycHg7IHBhZGRpbmctYm90dG9tOiA4cHg7IGJvcmRlci1ib3R0b20tc3R5bGU6IHNvbGlkOyBib3JkZXItYm90dG9tLWNvbG9yOiAjZGNkY2RjOyBib3JkZXItYm90dG9tLXdpZHRoOiAxcHgiIHdpZHRoPSIxMDAlIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IFJvYm90bywgQXJpYWwsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgY29sb3I6ICMwMDAwMDA7Ij48aW1nIGFsdD0iR29vZ2xlIGxvZ28iIGJvcmRlcj0iMCIgc3JjPSJodHRwOi8vd3d3LmdzdGF0aWMuY29tL2ltYWdlcy9icmFuZGluZy9nb29nbGVsb2dvLzF4L2dvb2dsZWxvZ29fY29sb3JfMTIweDQ4ZHAucG5nIiBzdHlsZT0iZGlzcGxheTogYmxvY2s7IiB0aXRsZT0iR29vZ2xlIiB3aWR0aD0iMTIwIj4gPC9zcGFuPjwvZGl2Pg0KPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBSb2JvdG8sIEFyaWFsLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGNvbG9yOiAjMDAwMDAwOyI-IDwhLS0gVGhpcyBpcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdWJqZWN0IC0tPiA8L3NwYW4-DQoNCg0KPCEtLSBQbGVhc2UgSU5TRVJUIHRoZSByZWxldmFudCBDdXN0b21lciBDb21tIGdrbXMgc25pcHBldCAtLT4NCjxwPkhlbGxvIEFwcHMgU2NyaXB0IHVzZXIsPC9wPg0KDQo8cD5UaGlzIG5vdGlmaWNhdGlvbiBpcyB0byBhbGVydCB5b3Ugb2YgYW4gdXBkYXRlIHRvIG9uZSBvciBtb3JlIG9mIHlvdXIgQXBwcyBTY3JpcHQgcHJvamVjdHMgdGhhdCBhcmUgYXR0YWNoZWQgdG8gRG9jcywgU2hlZXRzLCBhbmQgRm9ybXMgZG9jdW1lbnRzIHdpdGggc2NyaXB0IHNoYXJpbmcgc2V0dGluZ3MgdGhhdCBkaWZmZXIgZnJvbSB0aG9zZSBvZiB0aGUgZG9jdW1lbnQuPC9wPg0KDQo8cD48c3Ryb25nPlN0YXJ0aW5nIG9uIG9yIGFmdGVyIEp1bHkgNnRoLCAyMDE3PC9zdHJvbmc-LCB0aG9zZSBzY3JpcHQgc2hhcmluZyBzZXR0aW5ncyB3aWxsIGJlIHVwZGF0ZWQgdG8gbWF0Y2ggdGhvc2Ugb2YgdGhlIGRvY3VtZW50cyB0byB3aGljaCB0aGV5JiMzOTtyZSBhdHRhY2hlZC48L3A-DQoNCjxwPlRoZSBzaGFyaW5nIHNldHRpbmdzIHVwZGF0ZSBzaW1wbGlmaWVzIHNoYXJpbmcgc2V0dGluZ3MgZm9yIGRvY3VtZW50cyB3aXRoIGF0dGFjaGVkIEFwcHMgU2NyaXB0IHByb2plY3RzIGJ5IHRyZWF0aW5nIHRoZW0gbGlrZSBhIHNpbmdsZSBkb2N1bWVudC48L3A-DQoNCjxwPkFzIGEgcmVzdWx0IG9mIHRoZSBzaGFyaW5nIHNldHRpbmdzIHVwZGF0ZSwgYW5kIGFjY29yZGluZyB0byB0aGUgZG9jdW1lbnQgYWNjZXNzIGxldmVsLCBzb21lIHVzZXJzIG1heTo8L3A-DQoNCjx1bD4NCiAgPGxpPkdhaW4gb3IgbG9zZSBhY2Nlc3MgdG8gYWZmZWN0ZWQgcHJvamVjdHM8L2xpPg0KICA8bGk-Q2hhbmdlIHRoZWlyIGFjY2VzcyBsZXZlbHMgKGZvciBleGFtcGxlLCBvd25lciwgZWRpdG9yLCByZWFkZXIpPC9saT4NCjwvdWw-DQoNCjxwPjxzdHJvbmc-VGhpcyBjaGFuZ2Ugd2lsbCBub3QgYWZmZWN0IHNoYXJpbmcgc2V0dGluZ3MgZm9yIHRoZSBkb2N1bWVudHMuIE9ubHkgc2hhcmluZyBzZXR0aW5ncyBvZiBhdHRhY2hlZCBBcHBzIFNjcmlwdCBwcm9qZWN0cyB3aWxsIGJlIHVwZGF0ZWQuPC9zdHJvbmc-PC9wPg0KDQo8cD5BIENTViBmaWxlIGF0dGFjaGVkIHRvIHRoaXMgbWVzc2FnZSBsaXN0cyBhbGwgQXBwcyBTY3JpcHQgcHJvamVjdHMgd2hlcmUgeW91JiMzOTtyZSB0aGUgb3duZXIgYW5kIHdob3NlIHNoYXJpbmcgc2V0dGluZ3Mgd2lsbCBjaGFuZ2UgYXMgYSByZXN1bHQgb2YgdGhpcyBtaWdyYXRpb24uIFBsZWFzZSByZXZpZXcgdGhlc2UgZG9jdW1lbnRzIGFuZCBjb25maXJtIHRoYXQgdGhlaXIgc2hhcmluZyBzZXR0aW5ncyBhcmUgYWxzbyBhcHByb3ByaWF0ZSBmb3IgdGhlaXIgYXR0YWNoZWQgQXBwcyBTY3JpcHQgcHJvamVjdHMuPC9wPg0KDQo8cD5JZiBjaGFuZ2VzIGFyZSByZXF1aXJlZCwgZm9yIGVhY2ggZG9jdW1lbnQgd2hlcmUgc2V0dGluZ3MgbmVlZCB0byBiZSBjaGFuZ2VkLCB1c2Ugb25lIG9mIHRoZXNlIG1ldGhvZHM6PC9wPg0KDQo8dWw-DQogIDxsaT5JbiBEb2NzIG9yIFNoZWV0cywgY2xpY2sgPHN0cm9uZz5TaGFyZTwvc3Ryb25nPi48L2xpPg0KICA8bGk-SW4gRm9ybXMsIGNsaWNrIDxzdHJvbmc-QWRkIENvbGxhYm9yYXRvcjwvc3Ryb25nPi48L2xpPg0KICA8bGk-SW4gR29vZ2xlIERyaXZlLCBjbGljayA8c3Ryb25nPlNoYXJlPC9zdHJvbmc-LjwvbGk-DQo8L3VsPg0KDQo8cD5TaW5jZXJlbHksPC9wPg0KDQo8cD5UaGUgQXBwcyBTY3JpcHQgVGVhbTwvcD4NCjwhLS0gRmluYWxseSwgaW5jbHVkZSB0aGUgc3RhbmRhcmQgZm9vdGVyLiBUaGlzIGFsc28gZW5kcyB0aGUgYm9keSAtLT4NCjwhLS0gI2luY2x1ZGUgJy9na21zaWQvNjMyOTg2MycgLS0-DQoNCjwhLS0gRmluYWxseSwgaW5jbHVkZSB0aGUgVXNlciBzdGFuZGFyZCBmb290ZXIuIFRoaXMgYWxzbyBlbmRzIHRoZSBib2R5IC0tPg0KPGRpdiBzdHlsZT0iZm9udC1zaXplOiAxMHB4OyBjb2xvcjogIzY2NjY2NjsgcGFkZGluZy10b3A6IDhweDsgYm9yZGVyLXRvcC1zdHlsZTogc29saWQ7IGJvcmRlci10b3AtY29sb3I6ICNkY2RjZGM7IGJvcmRlci10b3Atd2lkdGg6IDFweCI-DQogIDxwPsKpIDIwMTcgIEdvb2dsZSBJbmMuIDE2MDAgQW1waGl0aGVhdHJlIFBhcmt3YXksIE1vdW50YWluIFZpZXcsIENBIDk0MDQzPC9wPg0KDQogIDxwPjxpPllvdSBoYXZlIHJlY2VpdmVkIHRoaXMgdXBkYXRlIGFzIGEgRyBTdWl0ZSBzZXJ2aWNlIGFubm91bmNlbWVudC48L2k-PC9wPg0KPC9kaXY-DQo8aW1nIGhlaWdodD0iMSIgd2lkdGg9IjMiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9hcHBzZXJ2ZS9ta3QvaW1nL2xUUERhTG1XbHg1blNpbTF6OWp3RG1vTVYzSjRvMVZfcDhjPS5naWYiPg==" 
    } 
    } 
] 

而在上面,第二元件(PARTID 0.0与mime类型文本/ HTML)的主体是这样的:

"body": { 
     "size": 3112, 
     "data": "PCEtLSBUaGlzIGN...<trimmed for succintness>..cDhjPS5naWYiPg==" 
    } 

那么如何解码这些数据呢? 标头是作为按照上面部分(PARTID 0.1)

"headers": [ 
    { 
    "name": "Content-Type", 
    "value": "text/html; charset=\"UTF-8\"" 
    }, 
    { 
    "name": "Content-Transfer-Encoding", 
    "value": "quoted-printable" 
    } 
] 

所以内容传输编码的是“引用打印”的

相同的加密/编码结果是我所得到的,当我其它取电子邮件。 不知道我该如何解码身体的数据(我在文档中也找不到关于它的任何地方)。

回答

1

我建立的东西来处理这个是这样的:我把这个先用text/html的

public string GetBodyWithRecursion(MessagePart p, string mimeType) 
{ 
    string Body = ""; 

     if (p.parts.Parts != null) 
     { 
      foreach (MessagePart part in p.Parts) 
      { 
       Body = $"{Body} {GetBodyWithRecursion(part, mimeType)}"; 
      } 
     } 
     else if (p.Body.Data != null && p.Body.AttachmentId == null && p.MimeType == mimeType) 
     { 
      Body = methodToConvertFrom64Url(p.Body.Data); 


      } 

      return Body; 
} 

,如果这是空白的 - 然后用text/plain的。 Incase HTML不可用,只有文本是。

希望这会有所帮助, Mike

相关问题