скачать вложения из почты с помощью microsoft graph rest api - PullRequest
0 голосов
/ 22 февраля 2019

Я успешно получаю список писем в папке «Входящие» с помощью Microsoft Graph Graph Rest Api, но мне трудно разобраться с документацией о том, как загрузить вложения из почты.

enter image description here

Например: Этот вопрос stackoverflow answer говорит о том, чего я намерен достичь, но я не понимаю, что такое message_idв упомянутой конечной точке: https://outlook.office.com/api/v2.0/me/messages/{message_id}/attachments

ОБНОВЛЕНИЕ

Я смог получить информацию о вложении, используя следующую конечную точку: https://graph.microsoft.com/v1.0/me/messages/{id}/attachments и получил следующееответ.

enter image description here

У меня сложилось впечатление, что ответ, вероятно, будет содержать ссылку для загрузки вложения, однако ответ содержит ключ с именем contentBytes, который, я думаю, является зашифрованнымсодержание файла.

1 Ответ

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

Для attachment ресурса из типа файла contentBytes свойство возвращает

в кодировке base64 содержимое файла

Пример

В следующем примере Node.js показано, как получить свойства вложения вместе с содержимым вложения (существует зависимость от requestбиблиотека ):

const attachment = await getAttachment(
    userId,
    mesasageId,
    attachmentId,
    accessToken
);
const fileContent = new Buffer(attachment.contentBytes, 'base64');
//...

где

const requestAsync = options => {
  return new Promise((resolve, reject) => {
    request(options, (error, res, body) => {
      if (!error && res.statusCode == 200) {
        resolve(body);
      } else {
        reject(error);
      }
    });
  });
};

const getAttachment = (userId, messageId, attachmentId, accessToken) => {
  return requestAsync({
    url: `https://graph.microsoft.com/v1.0/users/${userId}/messages/${messageId}/attachments/${attachmentId}`,
    method: "GET",
    headers: {
      Authorization: `Bearer ${accessToken}`,
      Accept: "application/json;odata.metadata=none"
    }
  }).then(data => {
    return JSON.parse(data);
  });
};

Обновление

В следующем примере показано, как загрузить вложение в виде файла вбраузер

try {
  const attachment = await getAttachment(
    userId,
    mesasageId,
    attachmentId,
    accessToken
  );

  download("data:application/pdf;base64," +  attachment.contentBytes, "Sample.pdf","application/pdf");
} catch (ex) {
  console.log(ex);
}

где

async function getAttachment(userId, messageId, attachmentId, accessToken){
    const res = await fetch(
      `https://graph.microsoft.com/v1.0/users/${userId}/messages/${messageId}/attachments/${attachmentId}`,
      {
        method: "GET",
        headers: {
          Authorization: `Bearer ${accessToken}`,
          Accept: "application/json;odata.metadata=none"
        }
      }
    );
    return res.json();
 }

Зависимость: download.js библиотека

...