如何使用flutter从GoogleApi获取附件ID

时间:2019-02-10 22:16:41

标签: flutter gmail-api email-attachments

我正在努力寻找如何获取Google Mail的AttachmentId列表。

当我从Gmail Api收到邮件时,得到以下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 :(得分:0)

我确实找到了在哪里查找信息: 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']));
});

我希望它可以节省任何人的时间。