Как получить идентификаторы вложений из GoogleApi с помощью флаттера - PullRequest
0 голосов
/ 11 февраля 2019

Я изо всех сил пытаюсь выяснить, как получить список AttachmentIds в Google Mail.

Когда я получаю письмо от API Gmail, я получаю следующий ответ Json:

{
  "id": string,
  "threadId": string,
  "labelIds": [
    string
  ],
  "snippet": string,
  "historyId": unsigned long,
  "internalDate": long,
  "payload": {
    "partId": string,
    "mimeType": string,
    "filename": string,
    "headers": [
      {
        "name": string,
        "value": string
      }
    ],
    "body": users.messages.attachments Resource,
    "parts": [
      (MessagePart)
    ]
  },
  "sizeEstimate": integer,
  "raw": bytes
}

Поскольку нет вызова API, чтобы вывести список всех вложенных файлов почты, я вычисляю информациюо вложениях должно быть где-то в этом ответе, но я не могу его найти.Спасибо за помощь

1 Ответ

0 голосов
/ 12 февраля 2019

Я выяснил, где искать информацию: Google разбивает информацию, такую ​​как вложения, и полное тело сообщения на части, которые вы можете найти в полезной нагрузке сообщения.Я написал функцию, которая рекурсивно добавляет все части в одноуровневый список, а затем отфильтровывает вложения и текст сообщения:

//parts are recursively nested. To find the attachments, it seems necessary to
// iterate over all parts.
List _parts = new List();
void _getAllParts(_iterable) {
  _iterable.forEach((_part) {
    _parts.add(_part);
    if (_part['parts'] != null) {
      _getAllParts(_part['parts']);
    }
  });
}

_getAllParts(_mailObject['payload']['parts']);

_parts.forEach((_part) {
  if (_part['filename'] != "") _attachments.add(_part);
  if (_part['mimeType'] == "text/plain") _textPlain = utf8.decode(base64.decode(_part['body']['data']));
  if (_part['mimeType'] == "text/html") _textHtml = utf8.decode(base64.decode(_part['body']['data']));
});

Надеюсь, это сэкономит кому-нибудь время ...

...