скачивать вложения из почты с помощью microsoft graph rest api

Я успешно получил список писем в почтовом ящике с помощью microsoft graph rest api, но мне трудно понять документацию о том, как загружать вложения из почты.

введите здесь описание изображения

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

ОБНОВЛЕНИЕ

мне удалось получить сведения о вложениях, используя следующую конечную точку: https://graph.microsoft.com/v1.0/me/messages/%7Bid%7D/attachments и получил следующий ответ.

введите здесь описание изображения

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


person Irfan Harun    schedule 22.02.2019    source источник
comment
Является ли значение свойства body данными, которые вы пытаетесь загрузить?   -  person guest271314    schedule 22.02.2019
comment
К письму прилагается PDF-файл. я хочу скачать это. Флаг HasAttachment также верен в результирующем json   -  person Irfan Harun    schedule 22.02.2019
comment
Не пробовал MS-grapgh. Какое значение свойства объекта представляет собой файл PDF?   -  person guest271314    schedule 22.02.2019
comment
@ guest271314: Мне удалось получить подробную информацию о вложении, используя конечную точку api: https://graph.microsoft.com/v1.0/me/messages/{id}/attachments   -  person Irfan Harun    schedule 22.02.2019


Ответы (2)


Для 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 библиотека

person Vadim Gremyachev    schedule 23.02.2019
comment
Мне удалось получить свойство contentBytes. Ищу решение использовать его и сохранить вложение - person Irfan Harun; 25.02.2019
comment
@ifranharun, сохранить в локальный файл в Node.js? - person Vadim Gremyachev; 25.02.2019
comment
Нет, я использую простую веб-страницу только с JQuery. Я могу использовать и другие библиотеки. Но нет NodeJs - person Irfan Harun; 25.02.2019
comment
@ifranharun, не могли бы вы обновить свой вопрос с помощью минимального примера, демонстрирующего, что не работает? - person Vadim Gremyachev; 25.02.2019
comment
@irfanharun, ответ обновлен (см. раздел обновлений) - person Vadim Gremyachev; 26.02.2019

Я не знаю, поможет ли это, но вам просто нужно добавить значение / $ в конце вашего запроса:

https://graph.microsoft.com/v1.0/me/messages/%7Bmessage_id%7D/attachments/%7Battachment_id%7D/$value.

person Dadv    schedule 25.02.2021