How to Send Email with Multiple Attachments using Amazon SES in Java Spring Boot?

In this example tutorial, you will learn how to send a plain-text or HTML-based email with multiple attachments using Amazon SES in Java Spring Boot.

Follow the steps below to send an HTML/plain-text based email with attachment using AWS SES in Java Spring Boot:

Setup SES

  1. Login to the AWS Management Console and open the AWS SES console at https://console.aws.amazon.com/ses.
  2. Create identity.
  3. Verify your email address with Amazon SES.
  4. Get your AWS credentials.

Add Dependencies

Add Java Mail Sender and Amazon SES Java SDK dependencies to your project.

For Gradle

Add the following dependency to your build.gradle file:


implementation 'org.springframework.boot:spring-boot-starter-mail'
implementation group: 'com.amazonaws', name: 'aws-java-sdk-ses', version: '1.12.12'

For Maven

Add the following dependency to your pom.xml file:



Find the other versions of AWS Java SDK for Amazon SES in the AWS SES Maven Repository.

Add Configuration Class

Create a AwsConfiguration.java class and annotate it with @Configuration. Add a method that returns an instance of AmazonSimpleEmailService class and annotate it with @Bean annotation. The following code shows how to do so:


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.simpleemail.AmazonSimpleEmailService;
import com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClientBuilder;

@Configuration
public class AwsConfiguration {

    public AWSStaticCredentialsProvider awsCredentials() {
        BasicAWSCredentials credentials =
                new BasicAWSCredentials("your-aws-access-key", "your-aws-access-secret");
        return new AWSStaticCredentialsProvider(credentials);
    }

    @Bean
    public AmazonSimpleEmailService getAmazonSimpleEmailService() {
        return AmazonSimpleEmailServiceClientBuilder.standard().withCredentials(awsCredentials())
                .withRegion("us-east-1").build();
    }
}

Send Email with Multiple Attachments

The following code shows you how to send email with multiple attachments using Amazon SES in Java:

Note: HTML based email content only support inline style css.


package com.example.ses.email;

import java.io.ByteArrayOutputStream;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Message.RecipientType;
import javax.mail.Session;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.amazonaws.services.simpleemail.AmazonSimpleEmailService;
import com.amazonaws.services.simpleemail.model.RawMessage;
import com.amazonaws.services.simpleemail.model.SendRawEmailRequest;

@ Component
public class AwsSesExample {

    @Autowired
    public AmazonSimpleEmailService amazonSimpleEmailService;
    
   
    public void sendEmailWithMultipleAttachments() {

        Session session = Session.getInstance(new Properties(System.getProperties()));
        MimeMessage mimeMessage = new MimeMessage(session);
        String emailContent = "<!DOCTYPE html>\n" + 
                "<html lang=\"en\">\n" + 
                "<head>\n" + 
                "    <meta charset=\"utf-8\">\n" + 
                "    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n" + 
                "    <title>Example HTML Email with multiple attachents</title>\n" + 
                "</head>\n" + 
                "<body style=\"background: whitesmoke; padding: 30px; height: 100%\">\n" + 
                "<h5 style=\"font-size: 18px; margin-bottom: 6px\">Dear example,</h5>\n" + 
                "<p style=\"font-size: 16px; font-weight: 500\">Greetings from TutorialsBuddy</p>\n" + 
                "<p>This is a simple html based email with multiple attachments.</p>\n" + 
                "</body>\n" + 
                "</html>";
        // link to files
        String filePath1 = "C:\\Users\\documents\\java-tutorials.pdf";
        String filePath2 = "C:\\Users\\documents\\python-tutorials.pdf";
        String filePath3 = "C:\\Users\\documents\\react-tutorials.pdf";
        String filePath4 = "C:\\Users\\documents\\php-tutorials.pdf";
        List<String> files = new ArrayList<>();
        files.add(filePath1);
        files.add(filePath2);
        files.add(filePath3);
        files.add(filePath4);

        try {
            mimeMessage.setSubject("Test Email", "UTF-8");

            mimeMessage.setFrom("example@tutorialsbuddy.com");
            mimeMessage.setRecipients(RecipientType.TO, "receiver@gmail.com");

            MimeMultipart msgBody = new MimeMultipart("alternative");
            MimeBodyPart wrap = new MimeBodyPart();
            MimeBodyPart htmlPart = new MimeBodyPart();
            htmlPart.setContent(emailContent, "text/html; charset=UTF-8");
            msgBody.addBodyPart(htmlPart);
            wrap.setContent(msgBody);

            MimeMultipart msg = new MimeMultipart("mixed");
            mimeMessage.setContent(msg);
            msg.addBodyPart(wrap);

            // Add multiple files to attachment
            for (int i = 0; files.size() > i; i++) {
                MimeBodyPart messageBodyPart = new MimeBodyPart();

                DataSource source = new FileDataSource(files.get(i));
                messageBodyPart.setDataHandler(new DataHandler(source));
                messageBodyPart.setFileName("file" + i + ".pdf");

                msg.addBodyPart(messageBodyPart);
            }
           
            
            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            mimeMessage.writeTo(outputStream);
            RawMessage rawMessage = new RawMessage(ByteBuffer.wrap(outputStream.toByteArray()));

            SendRawEmailRequest rawEmailRequest = new SendRawEmailRequest(rawMessage);
            amazonSimpleEmailService.sendRawEmail(rawEmailRequest);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

}