Gmail возвращает кодировку base64, но перечисляет как пригодную для печати - PullRequest
0 голосов
/ 11 мая 2019

Когда я вызываю Gmail API, я получаю следующее (просто отрывок, очевидно, поскольку тело массивное:

{
  ...
  payload: {
    ...
    parts: [
      {
        "partId": "1",
        "mimeType": "text/html",
        "filename": "",
        "headers": [
         {
          "name": "Content-Type",
          "value": "text/html; charset=\"UTF-8\""
         },
         {
          "name": "Content-Transfer-Encoding",
          "value": "quoted-printable"
         }
        ],
        "body": {
             "size": 4696,
             "data": "PCFET0NUWVBFIGh0bWw-PGh0bWwgbGFuZz1lbj48....

Я только что включил соответствующие части. Вы увидите, что часть тела htmlэлектронная почта имеет кодировку base64Url, но в кодировке передачи содержимого четко указано «цитируемая печать». Я запускаю ее через декодер base64url и выдает правильные данные. Но в заголовке явно говорится, что она доступна для печати в кавычках

Что такоеЯ скучаю?

Это обычная часть тела, которая кажется совершенно правильной.

"headers": [
 ...
{
 "name": "Content-Transfer-Encoding",
 "value": "base64"
}   ],
"body": {
 "size": 601,
 "data": "R29vZ2xlIEFQSXMgRXhwbG9yZXIgd2FzIGdyYW5

1 Ответ

1 голос
/ 11 мая 2019

Когда вы запрашиваете Ресурс сообщения , Gmail API может доставлять данные сообщения в одном из четырех форматов, которые вы можете установить через строку запроса ( см. Документацию ).

Ниже приведено описание каждой опции формата, взятой из официальных документов:

  • " full ": Возвращает полные данные сообщения электронной почты с содержимым тела, проанализированным в поле payload ; поле raw не используется. (По умолчанию)
  • " метаданные ": возвращает только идентификатор сообщения электронной почты, метки и заголовки сообщения электронной почты.
  • " минимальный ": возвращает только идентификатор сообщения электронной почты и метки; не возвращает заголовки сообщений, текст или полезные данные.
  • " raw ": Возвращает полные данные сообщения электронной почты с содержимым тела в необработанном поле в виде строки в кодировке base64url; поле полезной нагрузки не используется.

" full " - опция по умолчанию, при которой содержимое тела анализируется и автоматически сохраняется в виде строки в кодировке base64 в свойстве data.

Помните, что объект ресурса Message предоставляется для удобства взаимодействия с полезной нагрузкой RFC5322 и всегда предоставляет полезную нагрузку данных в base64 независимо от значения в заголовке Content-Transfer-Encoding.

Если вы хотите работать с необработанным IMF (Internet Message Format - RFC5322) текстом, то установите формат « raw » в строке запроса. Вам нужно будет base64 декодировать необработанную строку, чтобы получить данные IMF. Он будет выглядеть точно так, как вы ожидаете, но вам придется написать собственный анализатор для управления его содержимым.

...