Я пытаюсь отправить письмо с несколькими вложениями (сумма размера ‹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 МБ. Спасибо