Search code examples
javamicrosoft-graph-apimicrosoft-graph-mail

Send mail with multiple attachment using Graph API


I'm using Microsoft-Graph API version 1.4 and trying to send mail with attachment using following code..

IGraphServiceClient graphClient = GraphServiceClient.builder().authenticationProvider( authProvider ).buildClient();

Message message = new Message();
message.subject = "Meet for lunch?";
ItemBody body = new ItemBody();
body.contentType = BodyType.TEXT;
body.content = "The new cafeteria is open.";
message.body = body;
LinkedList<Recipient> toRecipientsList = new LinkedList<Recipient>();
Recipient toRecipients = new Recipient();
EmailAddress emailAddress = new EmailAddress();
emailAddress.address = "[email protected]";
toRecipients.emailAddress = emailAddress;
toRecipientsList.add(toRecipients);
message.toRecipients = toRecipientsList;
LinkedList<Attachment> attachmentsList = new LinkedList<Attachment>();
FileAttachment attachments = new FileAttachment();
attachments.name = "attachment.txt";
attachments.contentType = "text/plain";
attachments.contentBytes = "SGVsbG8gV29ybGQh";
attachmentsList.add(attachments);
message.attachments = attachmentsList;

graphClient.me()
    .sendMail(message,null)
    .buildRequest()
    .post();

Ref.Link: Graph-Send-Mail

But, message.attachments requires AttachmentCollectionPage object not LinkedList();

Can anyone help me to send a mail with multiple attachment.

Thanks


Solution

  • I found the solution to send multiple attachment in a single mail using 1.4.0 version. Checkout the following code...

    val address = EmailAddress()
    address.address = "[email protected]"
    val recipient = Recipient()
    recipient.emailAddress = address
    
    val message = MyMessage()
    message.subject = "Test E-Mail"
    message.body = getItemBody()
    message.toRecipients = Collections.singletonList(recipient)
    
    val att = FileAttachment()
    att.contentBytes = File("/home/user/file.pdf").readBytes()
    att.contentType = "text/pdf"
    att.name = "file.pdf"
    att.oDataType = "#microsoft.graph.fileAttachment"
    
    val att2 = FileAttachment()
    att2.contentBytes = "hello there! from second file".toByteArray(StandardCharsets.UTF_8)
    att2.contentType = "text/plain"
    att2.name = "hi2.txt"
    att2.oDataType = "#microsoft.graph.fileAttachment"
    
    message.addAttachment(att)
    message.addAttachment(att2)
    
    graphClient.me()
    .sendMail(message,false)
    .buildRequest()
    .post();
    

    The above code can be used to send multiple attachments with size less than 4 MB. To send above the limit please refer this.