1. Overview
In this quick tutorial, we’ll learn how to send emails with single and multiple attachments in Java using Jakarta Mail API.
2. Project Setup
We’ll start by adding the angus-mail dependency to our project:
<dependency>
<groupId>org.eclipse.angus</groupId>
<artifactId>angus-mail</artifactId>
<version>2.0.1</version>
</dependency>
Angus Mail is the Eclipse implementation of the Jakarta Mail API specification.
3. Sending Mail With Attachments
First, we need to configure the email service provider’s credentials. Then, the Session object is created by providing the email host, port, username, and password. All these details are provided by the email host service. We can use any fake SMTP testing servers for our code.
Session object will work as a connection factory to handle the configuration and authentication for JavaMail.
Now that we have a Session object, let’s move further and create MimeMessage and MimeBodyPart object. We use these objects to create the email message:
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
message.setSubject("Test Mail Subject");
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText("Mail Body");
In the above snippet, we’ve created the MimeMessage object with required details such as from, to, and subject. Then, we’ve got a MimeBodyPart object with the email body.
Now, we need to create another MimeBodyPart to add an attachment in our mail:
MimeBodyPart attachmentPart = new MimeBodyPart();
attachmentPart.attachFile(new File("path/to/file"));
We’ve now two MimeBodyPart objects for one mail Session. So we need to create one MimeMultipart object and then add both the MimeBodyPart objects into it:
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
multipart.addBodyPart(attachmentPart);
Finally, the MimeMultiPart is added to the MimeMessage object as our mail content and the Transport.send() method is invoked to send the message:
message.setContent(multipart);
Transport.send(message);
To summarize, the Message contains MimeMultiPart which further contains multiple MimeBodyPart(s). That’s how we assemble the complete email.
Moreover, to send multiple attachments you can simply add another MimeBodyPart.
4. Conclusion
In this tutorial, we’ve learned how to send emails with single and multiple attachments in Java.
As always, the complete source code is available over on GitHub.