使用 Graph API 版本 2.3.2 发送带有多个附件(大小小于 4 MB)的邮件 [英] Send Mail With Multiple Attachments (Size < 4 MB) Using Graph API Version 2.3.2

查看:97
本文介绍了使用 Graph API 版本 2.3.2 发送带有多个附件(大小小于 4 MB)的邮件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用 Graph API 版本 2.3.2 发送带有多个附件的邮件(大小总和小于 4MB).请找到以下相同的代码片段.

I'm trying to send mail with multiple attachments (Sum of size is < 4MB) using Graph API version 2.3.2. Please find the following code snippet for the same.

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("vivektest@gmail.com");
    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 MB20KBPDF.pdf = 20 KB

I've double check the size of the files. 3MBPDF.pdf = 3.6 MB 20KBPDF.pdf = 20 KB

总大小不大于 4 MB 但仍然返回以下错误

Total size is not greater then 4 MB but still its returning following error

严重:可投掷细节:com.microsoft.graph.http.GraphServiceException:错误代码:BadRequest错误信息:支持的最大请求长度为 4MB.

SEVERE: Throwable detail: com.microsoft.graph.http.GraphServiceException: Error code: BadRequest Error message: The maximum request length supported is 4MB.

POST https://graph.microsoft.com/v1.0/me/microsoft.graph.sendMailSdkVersion:graph-java/v2.3.2 授权:[PII_REDACTED]{"saveToSentItems":true,"message":{"body":{"conten[...]

POST https://graph.microsoft.com/v1.0/me/microsoft.graph.sendMail SdkVersion : graph-java/v2.3.2 Authorization : [PII_REDACTED] {"saveToSentItems":true,"message":{"body":{"conten[...]

413:请求实体太大 [...]

413 : Request Entity Too Large [...]

上面的代码片段是我从 msgraph-sdk-java 存储库的测试用例中捕获的.

The above code snippet I've captured from the test case of msgraph-sdk-java repo.

请帮助我发送小于 4 MB 的电子邮件.谢谢

Please help me to send email with size less then 4 MB. Thanks

推荐答案

您的请求超出了 Graph 请求的最大 4MB 限制:

Your request is exceeding the maximum 4MB limit for Graph requests as:

  • 第一个 pdf:3.6MB
  • 空间使用量增加为第一基于 base64 编码的 PDF:2.2MB
  • 第二个 pdf:20kB
  • 第二个 PDF 的空间使用量增加:7kB
  • JSON 有效负载:可能只有几 kB
  • 1st pdf :3.6MB
  • space usage increase for 1st PDF due to base64 encoding : 2.2MB
  • 2nd pdf: 20kB
  • space usage increase for 2nd PDF: 7kB
  • JSON payload: probably a few kBs

总数远远超过 4MB 的限制.您需要使用 大型附件上传那个PDF.

the total being well over the 4MB limit. You need to use large attachment uploads for that PDF.

这篇关于使用 Graph API 版本 2.3.2 发送带有多个附件(大小小于 4 MB)的邮件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆