Отправка почты с несколькими вложениями (размер <4 МБ) с использованием Graph API версии 2.3.2

Я пытаюсь отправить письмо с несколькими вложениями (сумма размера ‹4 МБ), используя Graph API версии 2.3.2. Для этого найдите следующий фрагмент кода.

public static void main(String[] a){
    try {
        TestBase testBase = new TestBase();
        Message message = getMessage();
        message.hasAttachments = true;
        AttachmentCollectionResponse response = new AttachmentCollectionResponse();
        response.value = Arrays.asList(
                getFileAttachment("/home/user/Downloads/3MBPDF.pdf"),
                getFileAttachment("/home/user/Downloads/20KBPDF.pdf"));
        message.attachments = new AttachmentCollectionPage(response, null);
        testBase.graphClient.me().sendMail(message, true).buildRequest().post();
    }catch (Exception e){
        e.printStackTrace();
    }
}

private static Message getMessage() {
    Message message = new Message();
    java.util.List<String> emails = Arrays.asList("[email protected]");
    java.util.List<Recipient> listReceipient = new ArrayList<>();
    for(String email : emails) {
        EmailAddress emailAddress = new EmailAddress();
        emailAddress.address = email;
        Recipient recipient = new Recipient();
        recipient.emailAddress = emailAddress;
        listReceipient.add(recipient);
    }
    message.body = getItemBody();
    message.toRecipients = listReceipient;
    message.subject = "Test Message";
    message.id = "1234";
    return message;
}

private static ItemBody getItemBody() {
    ItemBody itemBody = new ItemBody();
    itemBody.content = "<html><head></head><body> test body </body></html>";
    itemBody.contentType = BodyType.HTML;
    return itemBody;
}

private static FileAttachment getFileAttachment(String path) throws Exception{
    FileAttachment fileAttachment = new FileAttachment();
    File pdfFile = new File(path);
    InputStream fileStream = new FileInputStream(pdfFile);
    fileAttachment.name = pdfFile.getName();
    fileAttachment.contentBytes = getByteArray(fileStream);
    fileAttachment.oDataType = "#microsoft.graph.fileAttachment";
    fileAttachment.size = Math.toIntExact((pdfFile.length() / 1024) / 1024);
    System.out.println("FileSize::: "+fileAttachment.size);
    fileAttachment.id="521";
    return fileAttachment;
}

public static byte[] getByteArray(InputStream in) {
    try {
        ByteArrayOutputStream buffer = new ByteArrayOutputStream();
        int nRead;
        byte[] data = new byte[16384];
        while ((nRead = in.read(data, 0, data.length)) != -1) {
            buffer.write(data, 0, nRead);
        }
        buffer.flush();
        return buffer.toByteArray();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

Я дважды проверил размер файлов. 3MBPDF.pdf = 3,6 МБ 20KBPDF.pdf = 20 КБ

Общий размер не превышает 4 МБ, но по-прежнему возвращается следующая ошибка

СЕРЬЕЗНО: метательные детали: com.microsoft.graph.http.GraphServiceException: код ошибки: BadRequest Сообщение об ошибке: максимальная поддерживаемая длина запроса составляет 4 МБ.

POST https://graph.microsoft.com/v1.0/me/microsoft.graph.sendMail SdkVersion: graph-java / v2.3.2 Авторизация: [PII_REDACTED] {saveToSentItems: true, сообщение: {body: {conten [...]

413: объект запроса слишком большой [...]

Приведенный выше фрагмент кода, взятый из тестового примера репозитория msgraph-sdk-java.

Пожалуйста, помогите мне отправить электронное письмо размером менее 4 МБ. Спасибо


person Vivek Buddhadev    schedule 03.11.2020    source источник


Ответы (1)


Ваш запрос превышает максимальный лимит в 4 МБ для запросов Graph как:

  • 1-й PDF-файл: 3,6 МБ
  • увеличение использования пространства для первого PDF-файла из-за кодировка base64: 2,2 МБ
  • 2-й PDF-файл: 20 КБ
  • увеличение занимаемого места для 2-го PDF: 7 КБ
  • Полезная нагрузка JSON: вероятно, несколько килобайт

общая сумма превышает предел в 4 МБ. Для этот PDF.

person baywet    schedule 03.11.2020
comment
Спасибо @baywet за быстрый ответ. Не могли бы вы предложить мне пример, в котором я могу прикрепить пять файлов размером 1 МБ и один файл размером 6 МБ - person Vivek Buddhadev; 03.11.2020
comment
для справки, здесь был создан еще один вопрос stackoverflow.com/questions/64675294/ - person baywet; 04.11.2020